【问题标题】:Entity Framework Core - Error when trying to Add Migration after creating Model from existing databaseEntity Framework Core - 从现有数据库创建模型后尝试添加迁移时出错
【发布时间】: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, Action1 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 是否会应用第二个迁移。可能需要一些试验。

标签: c# entity-framework-core


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2017-06-01
    • 2021-06-30
    • 1970-01-01
    • 2021-07-26
    • 1970-01-01
    • 2019-02-12
    • 1970-01-01
    • 2017-02-06
    • 1970-01-01
    相关资源
    最近更新 更多