【问题标题】:Setting up multiple projects with EF core in separate project在单独的项目中使用 EF 核心设置多个项目
【发布时间】:2018-09-27 03:27:48
【问题描述】:

我应该如何设置一个包含多个项目的解决方案,一个项目是 ASP Web API(设置为启动项目),另一个是 API.Data 项目(只是标准类库)。

运行Add-Migration后出现如下错误:

启动项目“API.Data”以框架“.NETStandard”为目标。有 没有与此框架关联的运行时,以及针对它的项目 不能直接执行。使用实体框架核心包 Manager Console Tools 用这个项目,添加一个可执行项目 以引用此项目的 .NET Framework 或 .NET Core 为目标, 并将其设置为启动项目;或者,将此项目更新为 跨目标 .NET Framework 或 .NET Core。

我应该将Microsoft.EntityFrameworkCore 安装在 API.Data 项目中还是包含所有程序集的主启动项目中?

我为API.Data项目安装了Microsoft.EntityFrameworkCoreMicrosoft.EntityFrameworkCore.Design,主API项目设置为启动项目。

我得到这个错误:

您的启动项目“API”未引用 Microsoft.EntityFrameworkCore.Design。这个包是必需的 实体框架核心工具工作。确保您的启动项目是 正确,安装软件包,然后重试。

如果我将启动项目更改为 API.Data 项目,我会收到此错误:

启动项目“API.Data”以框架“.NETStandard”为目标。 没有与此框架关联的运行时,并且项目 定位它不能直接执行。使用实体框架 使用此项目的核心包管理器控制台工具,添加一个 面向 .NET Framework 或 .NET Core 的可执行项目 引用该项目,并将其设置为启动项目;或者,更新 此项目可以跨目标 .NET Framework 或 .NET Core。

当我构建解决方案时,我会为所有程序集构建这些警告:

 Consider app.config remapping of assembly ...

csproj 文件:

https://pastebin.com/fG7w81a8

【问题讨论】:

  • 你可以添加你的项目文件来检查依赖关系
  • 另外,您是否安装了“dotnet add package Microsoft.EntityFrameworkCore.Design”?
  • 您的 csproj 文件可以帮助确定问题

标签: c# visual-studio entity-framework


【解决方案1】:

Entity Framework Core 2.2+

在包含DBContext(我们称其为MyProject.Data)的库项目中,确保已安装这些软件包(您的版本可能会有所不同,您可能需要将SqlServer 更改为任何您想要的用于您的数据库):

<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="2.2.4" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer.Design" Version="1.1.6" />

在我的Startup.cs 中,我还指定了Migration Assembly,但我认为这没有必要:

        services.AddDbContext<MyDataContext>(options =>
        {
            options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"),
                serverOptions => serverOptions.MigrationsAssembly(typeof(MyDataContext).Assembly.FullName));

然后在Package Manager Console中,将目录改成你的Service/Startup项目,例如:

cd .\src\MyProject.Service

那要看你想做什么,还是在Package Manager Console

添加迁移

dotnet ef migrations add MyMigrationName --startup-project ./ --project ../MyProject.Data/

更新数据库

dotnet ef database update --startup-project ./ --project ../MyProject.Data/

生成脚本(上次迁移)

dotnet ef migrations script --startup-project ./ --project ../MyProject.Data/

【讨论】:

    【解决方案2】:

    如果您使用的是net core 2.1,则需要安装Command Line Tools,然后检查是否可以安装dotnet ef

    如果您在其他项目中有您的实体,您仍然需要添加作为对主项目的引用,然后,run dotnet ef migrations add,在您定义了连接字符串的主项目中,您可以添加 -v以详细模式运行,这样您可以捕获更多错误。

    例如,我们有我们的项目vtae.data,这个项目有一个名为context的文件夹,其中我们有两个上下文,corestats,然后,我们有 vtae.api 项目,这是一个 ASPNET Core 应用程序,带有一个 appsettings.json 文件,其中包含我们的连接字符串并导入 vtae.data 项目,因此,要使用 EF,我们只需进入 vtae.api 项目的文件夹,然后在那里运行我们的命令,例如

    dotnet ef migrations add InitialCreate --context CoreContext -v
    

    【讨论】:

      【解决方案3】:

      我在这里遇到了同样的问题,这就是你解决它的方法:

      使用选项 --startup-project=[Path_to_Your_Executable_Project] 在 CLI 上运行此命令

      发生这种情况是因为您可能试图在与主可执行项目分离的类库项目中运行此命令。

      【讨论】:

        【解决方案4】:

        在net5.0中,

        我遇到了同样的问题,我唯一要做的就是使用以下代码调整 Startup.cs:

        services.AddDbContext<ApplicationDbContext>(options =>
        options.UseSqlServer(
            Configuration.GetConnectionString("DefaultConnection"),
            x => x.MigrationsAssembly("API.Data")));
        

        然后重建项目并执行Add-Migration NewMigration

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-06-04
          • 1970-01-01
          • 2014-03-31
          • 2018-11-21
          • 1970-01-01
          • 2021-06-09
          • 2017-05-08
          相关资源
          最近更新 更多