[英]Create and Apply Migration at run time in .Net Core - Entity Framework Core
[英]I can't run migration (with .net core 3.0 and entity framework)
我的.Net Core版本是3.0.100-preview6-012264
。 您可以问我为什么使用预览版。 主要原因是使用GRPC有用(为此是脚手架)。 现在,我想在项目中使用实体框架。 我有以下.csproj
:
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>netcoreapp3.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<Protobuf Include="Protos\dashboard.proto" GrpcServices="Server" Generator="MSBuild:Compile" />
<Protobuf Include="Protos\users.proto" GrpcServices="Client" Generator="MSBuild:Compile" />
<Protobuf Include="Protos\anal.proto" GrpcServices="Client" Generator="MSBuild:Compile" />
<Content Include="@(Protobuf)" />
<None Remove="@(Protobuf)" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="DimaRabbitLogger" Version="1.3.3" />
<PackageReference Include="Grpc.AspNetCore.Server" Version="0.1.22-pre1" />
<PackageReference Include="Google.Protobuf" Version="3.8.0" />
<PackageReference Include="Grpc.Tools" Version="1.21.0" PrivateAssets="All" />
<PackageReference Include="Grpc.Core" Version="1.21.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="3.0.0-preview6.19304.10" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="3.0.0-preview6.19304.10" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="3.0.0-preview6.19304.10" />
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="3.0.0-preview5" />
<PackageReference Include="Newtonsoft.Json" Version="12.0.2" />
<PackageReference Include="System.Runtime.Serialization.Json" Version="4.3.0" />
</ItemGroup>
</Project>
还有几个非常简单的模型:
模型Application
:
public class Application
{
int ApplicationId { get; set; }
public string PackageName { get; set; }
public List<WorkspaceApplication> WorkspaceApplications { get; set; }
模型Workspace
:
public class Workspace
{
public int WorkspaceId { get; set; }
public string Name { get; set; }
public List<WorkspaceApplication> WorkspaceApplications { get; set; }
}
多对多关系类:
public class WorkspaceApplication
{
public int ApplicationId { get; set; }
public Application Application { get; set; }
public string WorkspaceId { get; set; }
public Workspace Workspace { get; set; }
}
而我的应用程序上下文:
public class ApplicationContext : DbContext
{
private readonly string _connectionString;
public DbSet<Workspace> Workspaces { get; set; }
public DbSet<Application> Applications { get; set; }
public ApplicationContext(IConfiguration configuration)
{
_connectionString = configuration.GetConnectionString("DashboardDb");
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseNpgsql(_connectionString, b => b.MigrationsAssembly("Dashboard"));
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<WorkspaceApplication>()
.HasKey(x => new {x.WorkspaceId, x.ApplicationId});
modelBuilder.Entity<WorkspaceApplication>()
.HasOne(x => x.Workspace)
.WithMany(x => x.WorkspaceApplications)
.HasForeignKey(x => x.WorkspaceId);
modelBuilder.Entity<WorkspaceApplication>()
.HasOne(x => x.Application)
.WithMany(x => x.WorkspaceApplications)
.HasForeignKey(x => x.ApplicationId);
}
}
我运行以下控制台命令:
dotnet ef migrations add FirstMigration
并显示以下错误消息:
由于找不到指定的命令或文件,因此无法执行。 可能的原因:*您输入的内置dotnet错误。 *您计划运行.NET Core,但dotnet-ef不存在。 *您想运行全局工具,但是PATH中指定的PATH找不到带有dotnet前缀(具有此名称)的可执行文件。
NET Core 2.2可以很好地工作。 问题出在哪儿?
从3.0开始, dotnet ef
不再是.NET SDK的一部分。
旧行为
在3.0之前的版本中,.net Core SDK中包含了dotnet ef工具,该工具可从任何项目的命令行中轻松使用,而无需执行额外的步骤。
新行为
从3.0开始,.NET SDK不包含dotnet ef工具,因此在使用它之前,必须将其显式安装为本地或全局工具。
要安装它,您可以运行以下命令:
dotnet tool install --global dotnet-ef --version 3.0.0-*
然后,您应该能够运行普通的ef-core命令,例如dotnet ef migrations add ...
不要忘记在您操作系统的PATH
变量中添加dotnet工具的PATH
。 例如,如果您使用linux ubuntu和zsh作为外壳,则必须在.zshrc
文件中添加以下内容:
export PATH=$PATH:$HOME/.dotnet/tools
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.