using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; using System; namespace Sample.Data { // This class demonstrates how to write constructors on your DbContext class such that: // // (a) it's friendly to LINQPad, ASP.NET Core, Visual Studio tools and Migrations // (b) you get better ease and flexiblity in how/where you specify the connection string public class SampleDbContext : DbContext { string _connectionString; // The constructor that ASP.NET Core expects. LINQPad can use it too. public SampleDbContext(DbContextOptions options) : base(options) { } // This constructor is simpler and more robust. Use it if LINQPad errors on the constructor above. // Note that _connectionString is picked up in the OnConfiguring method below. public SampleDbContext(string connectionString) => _connectionString = connectionString; // This constructor obtains the connection string from your appsettings.json file. // Tell LINQPad to use it if you don't want to specify a connection string in LINQPad's dialog. public SampleDbContext () { IConfiguration config = new ConfigurationBuilder().AddJsonFile("appsettings.json").Build(); _connectionString = config.GetConnectionString("DefaultConnection"); } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { // Assign _connectionString to the optionsBuilder: if (_connectionString != null) optionsBuilder.UseSqlServer(_connectionString); // Change to UseSqlite if you're using SQLite // Recommended: uncomment the following line to enable lazy-loading navigation hyperlinks in LINQPad: // if (InsideLINQPad) optionsBuilder.UseLazyLoadingProxies (); // (You'll need to add a reference to the Microsoft.EntityFrameworkCore.Proxies NuGet package, and // mark your navigation properties as virtual.) // Recommended: uncomment the following line to enable the SQL trace window: // if (InsideLINQPad) optionsBuilder.EnableSensitiveDataLogging (true); } // This property indicates whether or not you're running inside LINQPad: internal bool InsideLINQPad => AppDomain.CurrentDomain.FriendlyName.StartsWith("LINQPad"); } // This is just For Visual Studio design-time support and Migrations (LINQPad doesn't use it). // Include this class if you want to specify a different connection string when using Visual Studio design-time tools. public class SampleDbContextFactory : Microsoft.EntityFrameworkCore.Design.IDesignTimeDbContextFactory { public SampleDbContext CreateDbContext(string[] args) => new SampleDbContext("...design-time connection string..."); } }