48

如本文所述,我正在尝试使用实体框架数据迁移。

但是,当我尝试执行该Enable-Migrations步骤时,我在包管理器控制台中收到以下错误:

The target context 'MyDataContext' is not constructible. Add a default constructor or provide an implementation of IDbContextFactory

因此,我创建了一个IDbContextFactory在包含我的类的项目中实现的工厂类DbContext,但数据迁移似乎无法识别它。

我应该明确做些什么来指示数据迁移使用这个工厂类吗?

4

2 回答 2

65

当我编写上下文以获取连接字符串名称(然后使用 ninject 提供它)时,我也遇到了这个问题。

您经历的过程似乎是正确的,如果有任何帮助,这是我的课程实现的片段:

public class MigrationsContextFactory : IDbContextFactory<MyContext>
{
    public MyContext Create()
    {
        return new MyDBContext("connectionStringName");
    }
}

这应该就是你所需要的。

于 2012-07-31T20:21:58.823 回答
1

就像@Soren 指出的那样,我们可以实现,而不是使用IDbContextFactory, 在一些早期的EF Core版本(即 EF Core 2.1)上不支持IDesignTimeDbContextFactory<TContext>,它支持缺少的ConnectionString参数。

对于基于settings.json的方法,您可以将其与任何一个引用的接口一起使用,请查看@Arayn 的示例,该示例允许我们定义“ ConnectionStrings:DefaultConnection ”值路径

更新 1

根据@PaulWaldman 的评论,重新引入了对EF Core 5的支持IDbContextFactory。有关更多详细信息,请查看下面的评论。

于 2021-07-15T16:23:08.833 回答