首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在单独项目中建立具有EF核心的多个项目

在单独项目中建立具有EF核心的多个项目
EN

Stack Overflow用户
提问于 2018-09-27 03:27:48
回答 4查看 6.8K关注 0票数 7

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

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

启动项目'API.Data‘目标框架’.NET标准‘。没有与此框架相关联的运行时,不能直接执行针对它的项目。若要在此项目中使用实体框架核心包管理器控制台工具,请添加引用此项目的可执行项目(针对.NET框架或.NET核心),并将其设置为启动项目;或将该项目更新为跨目标.NET框架或.NET核心。

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

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

我知道这个错误:

您的启动项目'API‘不引用Microsoft.EntityFrameworkCore.Design。该软件包是实体框架核心工具工作所必需的。确保启动项目是正确的,安装软件包,然后再试一次。

如果我将启动项目更改为API.Data项目,则会得到以下错误:

启动项目'API.Data‘目标框架’.NET标准‘。没有与此框架相关联的运行时,不能直接执行针对它的项目。若要在此项目中使用实体框架核心包管理器控制台工具,请添加引用此项目的可执行项目(针对.NET框架或.NET核心),并将其设置为启动项目;或将该项目更新为跨目标.NET框架或.NET核心。

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

代码语言:javascript
复制
 Consider app.config remapping of assembly ...

csproj文件:

https://pastebin.com/fG7w81a8

EN

回答 4

Stack Overflow用户

发布于 2019-06-11 18:25:38

Entity Framework Core 2.2+

在包含DBContext的库项目(让我们称之为MyProject.Data)中,确保安装了这些包(您的版本可能有所不同,还可能需要将SqlServer更改为用于DB的任何内容):

代码语言:javascript
复制
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="2.2.4" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer.Design" Version="1.1.6" />

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

代码语言:javascript
复制
        services.AddDbContext<MyDataContext>(options =>
        {
            options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"),
                serverOptions => serverOptions.MigrationsAssembly(typeof(MyDataContext).Assembly.FullName));

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

代码语言:javascript
复制
cd .\src\MyProject.Service

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

添加迁移

代码语言:javascript
复制
dotnet ef migrations add MyMigrationName --startup-project ./ --project ../MyProject.Data/

更新数据库

代码语言:javascript
复制
dotnet ef database update --startup-project ./ --project ../MyProject.Data/

生成脚本(最后一次迁移)

代码语言:javascript
复制
dotnet ef migrations script --startup-project ./ --project ../MyProject.Data/
票数 14
EN

Stack Overflow用户

发布于 2018-09-27 03:41:24

如果使用的是NetCore2.1,则需要安装命令行工具,然后检查是否可以执行dotnet ef

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

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

代码语言:javascript
复制
dotnet ef migrations add InitialCreate --context CoreContext -v
票数 0
EN

Stack Overflow用户

发布于 2019-09-19 21:12:21

我在这里也有同样的问题,你就是这样解决的:

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

这是因为您可能试图在一个与主可执行项目分离的classlib项目中运行这个命令。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52529002

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档