【问题标题】:Entity Framework migration could not create foreign key constraint实体框架迁移无法创建外键约束
【发布时间】:2012-10-06 19:38:48
【问题描述】:

我有 2 张桌子:

public class Work
{
    public int WorkId { get; set; }
    (...)
}

public class Check
{
    public int CheckId { get; set; }
    (...)
}

然后我想在它们之间添加一个多对多与有效负载的关系:

public class WorkCheck
{
    [Key, Column(Order = 0)]
    [ForeignKey("Work")]
    public int WorkId { get; set; }
    public virtual Work Work { get; set; }

    [Key, Column(Order = 1)]
    [ForeignKey("Check")]
    public int CheckId { get; set; }
    public virtual Check Check { get; set; }

    (...)
}

   public class Work
    {
        public int WorkId { get; set; }
        (...)
        public virtual IList<WorkCheck> WorkChecks { get; set; }
    }

    public class Check
    {
        public int CheckId { get; set; }
        (...)
        public virtual IList<WorkCheck> WorkChecks { get; set; }
    }

在包管理器控制台中,我运行了命令“Add-Migration WorkCheckTableAdded”,没有显示任何错误。

但紧接着,当我执行“Update-Database -verbose”命令时,我得到了异常: "外键 'FK_dbo.WorkCheck_dbo.Work_WorkId' 引用了引用表 'dbo.Work' 中的无效列 'WorkId'。 无法创建约束。查看以前的错误。”

【问题讨论】:

  • WorkId 列在Work 表中是否已经存在于该名称下,并且在您运行迁移之前它是主键吗?还是列名不同(重新映射为HasColumnName)?数据库是 SQL Server 吗?
  • WorkId 列已经存在并且是主要的。明天我将创建一个新的空白项目并再次测试此问题。
  • 如果我从头开始一个项目,则不会出现问题。您知道如何重置旧项目的迁移,以便我的初始迁移包含我当前的架构(没有工作检查表)吗?

标签: entity-framework foreign-keys many-to-many constraints database-migration


【解决方案1】:

在新项目中不会出现此问题。这可能与我的项目中一些失败的迁移脚本有关。为了重置迁移,我删除了 VS 项目和目标数据库中的 Migrations 文件夹。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-02
    • 1970-01-01
    • 1970-01-01
    • 2014-05-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多