我使用EF Code First Migration。我已经有Request
课了,我想添加RequestLinked
课程。
这是我的Request
课程:
public class Request
{
[Key]
public virtual int RequestID { get; set; }
...
public virtual List<RequestLinked> RequestLinkeds { get; set; } <-- ADDED
}
以下是我的新RequestLinked
课程:
public class RequestLinked
{
[Key, Column(Order = 0)]
public int RequestID { get; set; }
[Key, Column(Order = 1)]
public int RequestRelatedID { get; set; }
public virtual Request Request { get; set; }
public virtual Request RequestRelated { get; set; }
}
我还在ObjectContext(OnModelCreating)
中添加了一条规则 modelBuilder.Entity<RequestLinked>()
.HasRequired(p => p.Request)
.WithMany(p => p.RequestLinkeds)
.WillCascadeOnDelete(false);
然后我为这个新添加的模型创建了一个迁移:
Add-Migration AddRequestLinkedTable
问题:生成的(EF迁移)代码创建了太多字段。
public override void Up()
{
CreateTable(
"dbo.RequestLinkeds",
c => new
{
RequestID = c.Int(nullable: false),
RequestRelatedID = c.Int(nullable: false),
Request_RequestID = c.Int(nullable: false),
RequestRelated_RequestID = c.Int(),
})
.PrimaryKey(t => new { t.RequestID, t.RequestRelatedID })
.ForeignKey("dbo.Requests", t => t.Request_RequestID)
.ForeignKey("dbo.Requests", t => t.RequestRelated_RequestID)
.Index(t => t.Request_RequestID)
.Index(t => t.RequestRelated_RequestID);
}
我不明白为什么我会收到Request_RequestID
和RequestRelated_RequestID
个字段。
请注意,我已在其他项目中执行了相同的步骤,并且生成的迁移计划并未包含这两个额外字段。
有什么想法吗?
非常感谢。
更新
正如3dd所建议的那样,我将RequestRelatedID标记为[ForeignKey(&#34; RequestRelated&#34;)]和[ForeignKey(&#34; Request&#34;)]和RequestID。
现在我得到了以下迁移计划:
public override void Up()
{
CreateTable(
"dbo.RequestLinkeds",
c => new
{
RequestID = c.Int(nullable: false),
RequestRelatedID = c.Int(nullable: false),
Request_RequestID = c.Int(),
})
.PrimaryKey(t => new { t.RequestID, t.RequestRelatedID })
.ForeignKey("dbo.Requests", t => t.RequestID, cascadeDelete: true)
.ForeignKey("dbo.Requests", t => t.RequestRelatedID, cascadeDelete: true)
.ForeignKey("dbo.Requests", t => t.Request_RequestID)
.Index(t => t.RequestID)
.Index(t => t.RequestRelatedID)
.Index(t => t.Request_RequestID);
}
因此,1个额外的字段消失了。那更好但一个仍然......
请注意,在我的Request
课程中,我将密钥定义为virtual
。我不知道这是否有问题...我试图删除此virtual
但仍然是同样的问题。
更新2
最后,我通过调整我的ObjectContext来实现它:
modelBuilder.Entity<RequestLinked>()
.HasRequired(p => p.Request)
.WithMany()
.WillCascadeOnDelete(false);