在以下控制台应用程序(.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的配置
答案 0 :(得分:51)
正如错误所述,如果您配置MyContext
到AddDbContext
,那么您还需要在DbContextOptions<MyContext>
类中添加一个接收类型为MyContext
的参数的构造函数以下
public MyContext(DbContextOptions<MyContext> options)
: base(options)
{ }
如果您不这样做,ASP.Net Core将无法注入您使用AddDbContext
设置的配置。