C# 实体框架核心-从现有数据库创建模型后尝试添加迁移时出错

C# 实体框架核心-从现有数据库创建模型后尝试添加迁移时出错,c#,entity-framework-core,C#,Entity Framework Core,我有一个带有实体框架核心的.NET核心项目。我使用以下命令从现有数据库创建了一个模型 Scaffold DbContext“Server=。\SQLEXPRESS;Database=DBName;Trusted_Connection=True;”Microsoft.EntityFrameworkCore.SqlServer-OutputDir模型 模型已经生成,我试图添加迁移,但生成的迁移实际上是在尝试重新创建数据库中已经存在的表。所以,当我尝试运行更新数据库时,我自然会遇到以下错误 正在应用迁

我有一个带有实体框架核心的.NET核心项目。我使用以下命令从现有数据库创建了一个模型

Scaffold DbContext“Server=。\SQLEXPRESS;Database=DBName;Trusted_Connection=True;”Microsoft.EntityFrameworkCore.SqlServer-OutputDir模型

模型已经生成,我试图添加迁移,但生成的迁移实际上是在尝试重新创建数据库中已经存在的表。所以,当我尝试运行更新数据库时,我自然会遇到以下错误

正在应用迁移“20200912095755_SetMaxLengthToBookTitle”。失败 正在执行DbCommand(20ms)[参数=[],命令类型='Text', CommandTimeout='30']创建表[作者]( [Id]int不是空标识, [名称]nvarchar(最大值)NULL, 约束[PK_Authors]主键([Id]);Microsoft.Data.SqlClient.SqlException(0x80131904):已存在 数据库中名为“Authors”的对象。在 Microsoft.Data.SqlClient.SqlConnection.OneError(SqlException, 位于Microsoft.Data.SqlClient.SqlInternalConnection.OneError(SqlException异常,布尔断开连接,操作
1 wrapCloseInAction)的布尔断开连接,操作
1 wrapCloseInAction)
Microsoft.Data.SqlClient.TdsParser.ThroweException和Warning(TdsParserStateObject
stateObj、布尔调用方连接锁、布尔异步关闭)位于
Microsoft.Data.SqlClient.TdsParser.TryRun(运行行为,
SqlCommand cmdHandler、SqlDataReader数据流、,
BulkCopySimpleResultSet bulkCopyHandler,TdsParserStateObject
stateObj、Boolean和dataReady)


这是什么原因?从EF Core中已有的数据库创建模型后,更新数据库的正确方法是什么?

基本上,我自己找到的答案是,我必须添加初始迁移并删除其中的所有内容以进行空迁移。从那时起,我可以继续使用代码优先的方法,就像EF 6中提供的“从数据库中代码优先”选项一样。

要么是代码优先(使用迁移),要么是数据库优先(使用从表中生成的代码),您必须选择一个是,但使用实体框架,可以使用现有数据库进行代码优先。对于实体框架核心,这是不可能的吗?回滚您的模型更改,使其与最初构建的一样。删除所有迁移,然后创建新的初始迁移,例如dotnet ef migrations add InitialCreate。然后更改模型,并创建第二次移植。删除第一次迁移,并查看EF是否将应用第二次迁移。可能需要一些实验。