Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

AddDbContext was called with configuration, but the context type 'MyContext' only declares a parameterless constructor?

In the following console application (.Net core 2.0), the scaffold-dbcontext created the following DbContext

public partial class MyContext : DbContext {     public virtual DbSet<Tables> Tables { get; set; }      protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)     {         if (!optionsBuilder.IsConfigured) { optionsBuilder.UseSqlServer(Program.Conn); }     }      protected override void OnModelCreating(ModelBuilder modelBuilder) { .... } } 

In the Main() (static void Main(string[] args)), the following code

var services = new ServiceCollection(); var conn = configuration.GetConnectionString("MySource"); services.AddDbContext<MyContext>(o => o.UseSqlServer(conn)); // Error 

got the following run-time error?

AddDbContext was called with configuration, but the context type 'MyContext' only declares a parameterless constructor. This means that the configuration passed to AddDbContext will never be used

like image 791
ca9163d9 Avatar asked Aug 29 '17 20:08

ca9163d9


1 Answers

As the error said it if you configure your MyContext through AddDbContext then you need too add a constructor that receive a parameter of type DbContextOptions<MyContext> into your MyContext class like below

public MyContext(DbContextOptions<MyContext> options)     : base(options) { } 

If you don't do that, ASP.Net Core will not be able to inject the configuration you set with AddDbContext.

like image 176
CodeNotFound Avatar answered Oct 08 '22 13:10

CodeNotFound