簡體   English   中英

如何在Entity Framework中設置兩個相同類型的導航屬性

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM