我应该把我的ef模型文件放在哪里

时间:2018-01-02 17:41:18

标签: asp.net-core-mvc entity-framework-core

我正在开发一个asp.net核心mvc 2.0 Web应用程序。 此应用程序适用于SQL Server数据库和实体框架核心。 我想创建一个控制台项目,用于在晚上做一些批处理。此项目应访问与Web项目相同的数据库。 所以我决定创建第三个通用项目(库),它将包含模型类,数据库上下文和迁移。 2项目将参考这个共同项目。

当我试图运行" dotnet ef"终端中的命令,在公共项目子文件夹中,我得到一个错误,说我这个项目应该是启动项目。但这是一个共享库......

1 个答案:

答案 0 :(得分:0)

EF Core与EF的不同之处在于,上下文旨在通过依赖注入容器进行实例化。换句话说,它依赖于注入的DbContextOptions实例,它告诉它除了其他之外使用什么类型的数据库连接以及如何连接。由于此注入仅发生在实际运行的项目中(即不是类库),因此EF命令行工具仅默认使用"启动项目",即可以执行的项目实际上已经开始了。

要启用针对类库的迁移,EF Core会提供IDesignTimeDbContextFactory。 EF命令将查找此接口的实现,如果存在,则使用该工厂创建所需的上下文。因此,您只需在类库中创建一个实现。

public class MyContextFactory : IDesignTimeDbContextFactory<MyContext>
{
    public MyContext CreateDbContext(string[] args)
    {
        var optionsBuilder = new DbContextOptionsBuilder<MyContext>();
        optionsBuilder.UseSqlServer("[connection string here]");

        return new MyContext(optionsBuilder.Options);
    }
}

是的,这意味着您需要对连接字符串进行硬编码,但重要的是,这不是特定于环境的。更合适的是,您应该迁移的唯一环境是开发,因此您不需要它是特定于环境的。

Documentation