[英]Entity Framework insert object with multiple navigation properties of same type and id
[英]How can I set up two navigation properties of the same type in Entity Framework
使用代碼第一個EF4(使用CTP5),我可以添加單個導航屬性以及外鍵,它將遵循命名並且只將一次外鍵添加到表中。 如果我然后添加相同類型的第二個屬性,它會將其分解為表中的4列而不是僅僅兩個。
示例代碼:
使用此模型,我獲得了一個名為PressTypeID的PressType的AdapterFrameCapability表中的單個屬性。
public class AdapterFrameCapability
{
[Key]
public int AdapterFrameCapabilityID { get; set; }
[Required]
public int PressTypeID { get; set; }
public virtual PressType PressType { get; set; }
}
這是我想要建模的設置,但它導致在表中創建4列,分別用於FromPressTypeID,FromPressTypeFromPressTypeID,ToPressTypeID和ToPressTypePressTypeID。 理想情況下,我只是喜歡FromPressTypeID和ToPressTypeID的列。 我在這做錯了什么?
public class AdapterFrameCapability
{
[Key]
public int AdapterFrameCapabilityID { get; set; }
[Required]
public int FromPressTypeID { get; set; }
[Display(Name = "From Press Type")]
public virtual PressType FromPressType { get; set; }
[Required]
public int ToPressTypeID { get; set; }
[Display(Name = "To Press Type")]
public virtual PressType ToPressType { get; set; }
}
您需要刪除流暢的API以獲取所需的架構,這是其中一種情況:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<AdapterFrameCapability>()
.HasRequired(afc => afc.FromPressType)
.WithMany()
.HasForeignKey(afc => afc.FromPressTypeID)
.WillCascadeOnDelete(true);
modelBuilder.Entity<AdapterFrameCapability>()
.HasRequired(afc => afc.ToPressType)
.WithMany()
.HasForeignKey(afc => afc.ToPressTypeID)
.WillCascadeOnDelete(false);
}
在其中一個關聯上切換級聯刪除是故意的, 否則 SQL Server會拋出以下錯誤:
在表'AdapterFrameCapabilities'上引入FOREIGN KEY約束'AdapterFrameCapability_ToPressType'可能會導致循環或多個級聯路徑。 指定ON DELETE NO ACTION或ON UPDATE NO ACTION,或修改其他FOREIGN KEY約束。 無法創建約束。
因此,我們需要在其中一個關聯上關閉它,就像我在代碼中所做的那樣。
我以為你應該使用數據注釋屬性
[ForeignKey("FromPressTypeId")]
等等
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.