【问题标题】:Create EF Core as separate project in Visual Studio 2017在 Visual Studio 2017 中将 EF Core 创建为单独的项目
【发布时间】:2018-04-03 17:41:26
【问题描述】:

我正在尝试创建一个单独的 EF Core 2 作为单独的项目。

我创建了一个类库(.net core),添加两个引用:Microsoft.EntityFrameworkCoreMicrosoft.EntityFrameworkCore.Design

然后我遇到了这样的错误:

找不到指定的框架“Microsoft.NETCore.App”,版本“2.0”

我通过在根文件夹中添加一个名为 global.json 的 json 文件来解决,其内容是:

{
   "sdk": {
      "version": "2.0.2"
   }
}

到这里为止。

如果我运行命令:dotnet ef update database,它会告诉你:

没有为此 DbContext 配置数据库提供程序。

大部分人都说我要注册Startup.cs。但是我没有,因为项目是类库,没有mvc核心应用。

那么,在这种情况下该怎么做呢?

当然,我有一个单独的 mvc 核心项目,它引用了那个 EF 核心项目。我应该在 Startup.cs 文件中注册 dbcontext 吗?

【问题讨论】:

  • 基本上限制是,您需要一个可午餐的应用程序来执行 dotnet 命令。您通常使用-p/--project(从启动应用程序文件夹运行时)或从库文件夹运行时使用-s/--startup-project。这是必需的,以便从 Startup.cs/Program.cs 加载正确的提供程序和连接字符串

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


【解决方案1】:

假设自从我这样做后过去几周没有任何变化:

创建类DesignTimeDbContextFactory(将ApplicationDbContext替换为您的DbContext的名称:

public class DesignTimeDbContextFactory : IDesignTimeDbContextFactory<ApplicationDbContext>
{
    public ApplicationDbContext CreateDbContext(string[] args)
    {
        var connectionString = "Server=(localdb)\\mssqllocaldb;Database=MyDbName;Trusted_Connection=True;MultipleActiveResultSets=true";

        var builder = new DbContextOptionsBuilder<ApplicationDbContext>();

        builder.UseSqlServer(connectionString);

        return new ApplicationDbContext(builder.Options);
    }
}

现在执行以下操作之一:

  • 如果使用 Add-Migration 和 Update-Database 命令行开关,则使用 -project [project-name] 标志

  • 如果从命令行使用 dotnet,请使用 --project [project-name] 标志

  • 或者您可以确保将此类库设置为启动项目,并在 PM 控制台中设置“默认项目”,然后添加您的迁移并更新数据库

【讨论】:

  • 这一条只有一条评论。除了在命令末尾使用--project &lt;ProjectName&gt; 不需要他将启动项目设置为不同的事实之外,这几乎是 100% 正确的。
  • 感谢@Elfocrash。在最后一部分更新了一些选项。它似乎通过 VS 与通过命令行的工作方式不同,所以希望这会对所有人有所帮助。
  • 感谢您的评论。那么,对于身份,如何以这种方式进行?
  • 一般来说,这是正确的做法。但是,在这里使用 JSON 配置不会给您带来任何好处。您仍在跨项目复制连接字符串,并且由于这是一个类库,因此环境不会发挥作用(无论如何,您甚至没有使用环境特定的 JSON 配置)。您也可以像文档一样在代码中硬编码连接字符串。顾名思义,IDesignTimeDbContextFactory 无论如何都应该只用于开发。
  • 感谢@ChrisPratt 指出配置。我使用配置文件,因为我有时会在 LocalDb 和 Azure DB 之间切换,以便手动测试迁移。我已经更新了答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-01
  • 2017-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-29
相关资源
最近更新 更多