在单独的项目中使用EF核心设置多个项目

时间:2018-09-27 03:27:49

标签: c# visual-studio entity-framework

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

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

  

启动项目“ API.Data”以框架“ .NETStandard”为目标。有   没有与此框架关联的运行时,并且针对它的项目   无法直接执行。使用实体框架核心软件包   使用此项目的Manager控制台工具,添加一个可执行项目   定位引用此项目的.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”为目标。   没有与此框架和项目关联的运行时   定位它不能直接执行。使用实体框架   在该项目的Core Package Manager控制台工具中,添加一个   面向.NET Framework或.NET Core的可执行项目   引用此项目,并将其设置为启动项目;或更新   该项目可以跨目标.NET Framework或.NET Core。

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

 Consider app.config remapping of assembly ...

csproj文件:

https://pastebin.com/fG7w81a8

4 个答案:

答案 0 :(得分:0)

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

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

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

appsettings.json

答案 1 :(得分:0)

Entity Framework Core 2.2+

在包含DBContext的库项​​目中,确保安装了这些软件包(您的版本可能会有所不同,也可能需要将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 :(得分:0)

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

  

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

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

答案 3 :(得分:0)

在 net5.0 中,

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

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

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