使用配置调用AddDbContext,但上下文类型“MyContext”仅声明一个无参数构造函数?

时间:2017-08-29 20:25:44

标签: c# entity-framework .net-core entity-framework-core

在以下控制台应用程序(.Net core 2.0)中,scaffold-dbcontext创建了以下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) { .... }
}

在Main()(static void Main(string[] args))中,以下代码

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

得到以下运行时错误?

  

使用配置调用AddDbContext,但上下文类型“MyContext”仅声明无参数构造函数。这意味着永远不会使用传递给AddDbContext的配置

1 个答案:

答案 0 :(得分:51)

正如错误所述,如果您配置MyContextAddDbContext,那么您还需要在DbContextOptions<MyContext>类中添加一个接收类型为MyContext的参数的构造函数以下

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

如果您不这样做,ASP.Net Core将无法注入您使用AddDbContext设置的配置。