我应该如何设置包含多个项目的解决方案,一个项目是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.EntityFrameworkCore
和Microsoft.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文件:
答案 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
。