【发布时间】:2020-12-30 16:44:55
【问题描述】:
我有带有 Entity Framework Core 的 .NET Core 项目。我使用以下命令从现有数据库创建了一个模型
Scaffold-DbContext "Server=.\SQLEXPRESS;Database=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, 约束 [PK_Authors] 主键 ([Id]) ); Microsoft.Data.SqlClient.SqlException (0x80131904):已经有 数据库中名为“作者”的对象。在 Microsoft.Data.SqlClient.SqlConnection.OnError(SqlException 异常, Boolean breakConnection, Action
1 wrapCloseInAction) at Microsoft.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action1 wrapCloseInAction) 在 Microsoft.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) at Microsoft.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler、SqlDataReader 数据流、 BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean & dataReady)
这是什么原因?从 EF Core 中现有的数据库创建模型后更新数据库的正确方法是什么?
【问题讨论】:
-
代码优先(迁移)或数据库优先(代码从表中生成),你必须选择一个
-
是的,但是使用实体框架可以先使用现有数据库编写代码。这对 Entity Framework Core 来说是不可能的吗?
-
回滚您的模型更改,使其与最初的脚手架一样。删除所有迁移,然后创建一个新的初始迁移,例如dotnet ef 迁移添加 InitialCreate。然后更改您的模型,并创建第二次迁移。删除第一个迁移,看看 EF 是否会应用第二个迁移。可能需要一些试验。