[英]Foreign Key Entity Framework 6.1 Code First create unecessary column
我有这个模特
public class Event {
[Key]
public int Id { get; set; }
public string Title { get; set; }
}
public class EventAction {
[Key]
public int Id { get; set; }
public int EventId { get; set; }
[ForeignKey("EventId")]
public Event Event { get; set; }
public int? RelatedEventId { get; set; }
[ForeignKey("RelatedEventId")]
public Event RelatedEvent { get; set; }
}
当我生成代码首次迁移时,即使我放置了ForeignKey
属性来指示要使用的字段,它Event_Id
尝试添加新的Event_Id
列而不使用我的RelatedEventId
。
这不是我第一次定义链接到同一表的多个外键,但是我从来没有经历过这个问题。
这是生成的迁移代码
public override void Up() {
AddColumn("dbo.EventActions", "Event_Id", c => c.Int());
AddColumn("dbo.EventActions", "RelatedEventId", c => c.Int());
CreateIndex("dbo.EventActions", "Event_Id");
CreateIndex("dbo.EventActions", "RelatedEventId");
AddForeignKey("dbo.EventActions", "Event_Id", "dbo.Events", "Id");
AddForeignKey("dbo.EventActions", "RelatedEventId", "dbo.Events", "Id");
}
我终于找到了问题。 为简单起见,我省略了所有Event
类,并且问题出在EventAction
。
因此, Event
类中缺少的部分是EventAction
的集合。
public class Event {
[Key]
public int Id { get; set; }
public string Title { get; set; }
//this line was missing in my original post
//and that's the one that was confusing entity framework
public ICollection<EventAction> Actions { get; set; }
}
EventAction
类包含两个具有Event
类型的属性。 实体框架必须知道我们要绑定到哪一个。
因此,要实现此目的,我们需要在批注上在集合属性上添加[InverseProperty("Event")]
。 在这里,“事件”是指属性名称,而不是类型。
使用Fluent API时,在定义外键时必须使用WithMany(d => d.Actions)
的重载版本。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.