【问题标题】:Using modelbuilder.HasKey() causes error in entity framework new migrations使用 modelbuilder.HasKey() 会导致实体框架新迁移出错
【发布时间】:2021-02-06 17:39:51
【问题描述】:

我有一些将复合键作为主键的实体。 我使用 fluentApi 配置它们来设置复合键,例如:

modelBuilder.Entity<EntityWithCompositeKey>().HasKey(entity => new { entity.Property1, entity.Property2});

但是当我想在添加新迁移后更新数据库时出现错误:

System.InvalidOperationException: To change the IDENTITY property of a column, the column needs to be dropped and recreated.

经过一番挖掘,我意识到这是因为 fluentApi 中的那些设置来设置复合键,我认为实体框架想要更改实体的主键来设置新的复合键,我得到这个错误......我是对的???我哪里做错了?

由于这个错误,我无法更新我的数据库,每次我需要删除迁移文件夹和数据库并重新创建它们以便进行新的更改时,随着我们越来越接近生产,这变得非常烦人。

我正在使用 Entity Framework 5rc1 和 Asp.Net Core 3.1

【问题讨论】:

    标签: c# entity-framework asp.net-core entity-framework-core ef-fluent-api


    【解决方案1】:

    更新列的主键时,需要删除迁移记录中的方法migrationBuilder.AlterColumn,而不删除迁移文件。 这是最初的记录。

    然后我添加一个实体并重新迁移。删除Up方法中的migrationBuilder.AlterColumn。

    数据库中的键被改变了。

    【讨论】:

    • 谢谢...它对我有用...但是有没有一种方法可以在添加新迁移时自动执行此操作?我的意思是手动更改迁移文件是否正确?因为不只有一个实体使用复合键,所以几乎有 10 个实体,每次我们进行新迁移时执行这项工作是一项耗时的任务,而且......!
    • 我看了官方文档和类似的问题,确实没有这样的解决方案。因为迁移文件是Entity Framework自动生成的,所以手动修改是正确的。
    猜你喜欢
    • 2015-07-23
    • 1970-01-01
    • 1970-01-01
    • 2015-05-11
    • 2021-07-01
    • 2013-09-17
    相关资源
    最近更新 更多