[英]Two FKs in Entity Framework Fluent API
我正在努力连接两个非常简单的表:
[Table("Item")]
public class Item
{
[Key]
[Column("itemId", TypeName = "int")]
public int ItemId { get; set; }
}
[Table("LinkedItems")]
public class LinkedItem
{
[Key]
[Column("itemId", TypeName = "int")]
public int ItemId { get; set; }
[Column("parentItemId", TypeName = "int")]
public int ParentItemId { get; set; }
}
LinkedItem
表中有两个外键:
itemId
,指向要显示其自身的表Item
parentItemId
,指向表Item
以显示其父项
我想完成这样的事情:
[Table("Item")]
public class Item
{
[Key]
[Column("itemId", TypeName = "int")]
public int ItemId { get; set; }
public ICollection<LinkedItem> ChildItems { get; set; }
public LinkedItem LinkedItem { get; set; }
}
[Table("LinkedItems")]
public class LinkedItem
{
[Key]
[Column("itemId", TypeName = "int")]
public int ItemId { get; set; }
[Column("parentItemId", TypeName = "int")]
public int ParentItemId { get; set; }
public Item Item { get; set; }
public Item ParentItem { get; set; }
}
我成功创建了从Item到LinkedItem的连接:
modelBuilder.Entity<Item>().HasOptional(i => i.LinkedItem).WithRequired(i => i.Item);
但我无法添加其他连接。 您能帮我为这两个表配置Fluent API吗?
为此,不需要LinkedItem类。 您只需上一堂课就可以完成。
public class Item
{
public int Id { get; set; }
public int ParentItemId { get; set; }
public virtual Item ParentItem { get; set; }
public virtual ICollection<Item> ChildItems { get; set; }
}
modelBuilder.Entity<Item>()
.HasRequired(entity => entity.ParentItem)
.WithMany(entity => entity.ChildItems)
.HasForeignKey(entity => entity.ParentItemId);
否则,只需添加:
modelBuilder.Entity<Item>()
.HasMany(entity => entity.ChildItems)
.WithRequired(entity => entity.ParentItem)
.HasForeignKey(entity => entity.ParentItemId);
编辑:扩展答案。
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Item>()
.HasOptional(entity => entity.LinkedItem)
.WithRequired(entity => entity.Item);
modelBuilder.Entity<Item>()
.HasMany(entity => entity.ChildItems)
.WithRequired(entity => entity.ParentItem)
.HasForeignKey(entity => entity.ParentItemId);
}
[Table("Item")]
public class Item
{
[Key]
public int ItemId { get; set; }
public virtual ICollection<LinkedItem> ChildItems { get; set; }
public virtual LinkedItem LinkedItem { get; set; }
}
[Table("LinkedItem")]
public class LinkedItem
{
[Key]
public int ItemId { get; set; }
public int ParentItemId { get; set; }
public virtual Item Item { get; set; }
public virtual Item ParentItem { get; set; }
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.