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

el_*_*_le 6 c# entity-framework visual-studio

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

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

启动项目“API.Data”针对框架“.NETStandard”。没有与此框架关联的运行时,并且无法直接执行针对它的项目。要将 Entity Framework Core Package Manager Console Tools 与此项目一起使用,请添加一个面向 .NET Framework 或 .NET Core 的可执行项目并引用此项目,并将其设置为启动项目;或者,更新此项目以跨目标 .NET Framework 或 .NET Core。

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

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

我收到此错误:

您的启动项目“API”未引用 Microsoft.EntityFrameworkCore.Design。这个包是 Entity Framework Core Tools 工作所必需的。确保您的启动项目正确,安装包,然后重试。

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

启动项目“API.Data”针对框架“.NETStandard”。没有与此框架关联的运行时,并且无法直接执行针对它的项目。要将 Entity Framework Core Package Manager Console Tools 与该项目一起使用,请添加一个指向该项目的 .NET Framework 或 .NET Core 的可执行项目,并将其设置为启动项目;或者,更新此项目以跨目标 .NET Framework 或 .NET Core。

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

 Consider app.config remapping of assembly ...
Run Code Online (Sandbox Code Playgroud)

csproj 文件:

https://pastebin.com/fG7w81a8

Ser*_*gan 9

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" />
Run Code Online (Sandbox Code Playgroud)

在我的Startup.cs我也指定了Migration Assembly但我不认为这是必要的:

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

然后在 中Package Manager Console,将目录更改为您的服务/启动项目,例如:

cd .\src\MyProject.Service
Run Code Online (Sandbox Code Playgroud)

然后取决于你想做什么,仍然在Package Manager Console

添加迁移

dotnet ef migrations add MyMigrationName --startup-project ./ --project ../MyProject.Data/
Run Code Online (Sandbox Code Playgroud)

更新数据库

dotnet ef database update --startup-project ./ --project ../MyProject.Data/
Run Code Online (Sandbox Code Playgroud)

生成脚本(上次迁移)

dotnet ef migrations script --startup-project ./ --project ../MyProject.Data/
Run Code Online (Sandbox Code Playgroud)


rek*_*m87 0

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

如果您的实体位于其他项目中,您仍然需要添加作为对主项目的引用,然后,run dotnet ef migrations add从主项目(定义连接字符串的项目)中,您可以添加 -v 以在详细模式下运行,这样你就可以发现更多错误。

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

dotnet ef migrations add InitialCreate --context CoreContext -v
Run Code Online (Sandbox Code Playgroud)