我有带有Entity Framework Core的.NET Core项目。我使用以下命令从现有数据库创建了模型
Scaffold-DbContext“服务器=。\ SQLEXPRESS;数据库= DBName; Trusted_Connection = True;” Microsoft.EntityFrameworkCore.SqlServer -OutputDir模型
已生成模型,并且我尝试添加迁移,但是生成的迁移实际上是在尝试重新创建数据库中已经存在的表。因此,当我尝试运行Update-Database时,我自然会遇到以下错误
应用迁移'20200912095755_SetMaxLengthToBookTitle'。失败的 执行DbCommand(20ms)[Parameters = [],CommandType ='Text', CommandTimeout = '30']创建表[作者]( [Id] int NOT NULL IDENTITY, [名称] nvarchar(max)为NULL, CONSTRAINT [PK_Authors]主键([Id])); Microsoft.Data.SqlClient.SqlException(0x80131904):已经存在 数据库中名为“作者”的对象。在 Microsoft.Data.SqlClient.SqlConnection.OnError(SqlException异常, 布尔值breakConnection,操作为
1 wrapCloseInAction) at Microsoft.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action
1 wrapCloseInAction),位于 Microsoft.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj,布尔值调用者HasConnectionLock,布尔值asyncClose) Microsoft.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler,SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler,TdsParserStateObject stateObj,Boolean&dataReady)
原因是什么?从EF Core中已经存在的数据库创建模型后,更新数据库的正确方法是什么?
答案 0 :(得分:1)
基本上,我为自己找到的答案是我必须添加一个初始迁移并删除其中的所有内容以进行空迁移。从那时起,我可以使用EF 6中提供的“代码优先于数据库”选项来使用代码优先方法。