【发布时间】: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