【问题标题】:Entity Framework error "Column names in each table must be unique"实体框架错误“每个表中的列名必须是唯一的”
【发布时间】:2021-01-05 16:48:59
【问题描述】:

我已手动将列 IdCategory 添加到我的表 Books 中,现在每次尝试运行 Update-Database 时,都会出现此错误:

失败:Microsoft.EntityFrameworkCore.Database.Command[20102]

执行 DbCommand 失败 (43ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
ALTER TABLE [书籍] ADD [IdCategory] ​​nvarchar(max) NULL;

执行 DbCommand 失败 (43ms) [Parameters=[], CommandType='Text', CommandTimeout='30']

每个表中的列名必须是唯一的。表“Books”中的列名“IdCategory”被指定了多次。

我在许多论坛上都发现了此类问题,但解决方案在我的情况下并没有解决。

我该如何解决这个问题?

这是我的模型:

public class Book
{
        [Key]
        public int Id { get; set; }
        [Required]
        public string Name { get; set; }
        public string Author { get; set; }
        public string ISBN { get; set; }
        public int IdCategory { get; set; }
}

public class BookCategory
{
    [Key]
    public int IdCategory  { get; set; }

    [Required]
    public string Description { get; set; }
}

【问题讨论】:

  • 那么,您的情况是什么?您显然正在执行ALTER TABLE [Books] ADD [IdCategory] nvarchar(max) NULL,但该列已经存在。我们无法为您提供任何帮助。
  • 你能显示实体类BookCategory吗?
  • Book的category属性不应该是“BookCatelgory”类型的导航属性吗?
  • 如果您还使用迁移,则无法进行“手动”数据库更新
  • 我问是否有办法“重置”并使用实际模型简单地更新数据库。

标签: c# sql-server entity-framework .net-core


【解决方案1】:

尝试运行添加迁移,然后删除其中的代码,然后应用更新迁移。这应该将您的模型与数据库同步。

【讨论】:

    【解决方案2】:

    我是这样解决的:

    1. 删除数据库 __EFmigrationHistory 上的表
    2. 删除迁移文件夹中的所有 c# 文件
    3. 初始运行添加迁移
    4. 查看迁移文件夹 ex 中的文件。 20210105181328_Initial.cs
    5. 使用“up”方法删除您不想在 db 上创建的所有部分,因为它们已经存在或导致问题。
    6. 运行更新数据库

    这对我有用

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多