簡體   English   中英

EF代碼優先聲明實體關系2個字段到達同一集合

[英]EF Code First Declaring Entity relationships 2 fields to the same collection

我正在使用帶有Code First的Entity Framework。 我的數據庫中有一個表,用於存儲用戶之間的關系。 表結構看起來很像這樣:

  • RequestID
  • UserFromID
  • UserToID

UserFromIDUserToID都是我的User表的外鍵。

在我的用戶實體中,我有一個名為“ Relationships設置”的虛擬屬性。 我希望此屬性是上面列出的表中所有RelationshipRequests的集合,其中當前用戶UserIDUserFromIDUserToID

這些是我在上下文中的綁定:

modelBuilder.Entity<UserProfile>()
    .HasMany(e => e.Relationships).WithRequired(e => e.UserFrom)
    .HasForeignKey(e => e.UserFromID).WillCascadeOnDelete(false);
modelBuilder.Entity<UserProfile>()
    .HasMany(e => e.Relationships).WithRequired(e => e.UserTo)
    .HasForeignKey(e => e.UserToID).WillCascadeOnDelete(true);

但是,一旦為用戶檢索到關系,集合中唯一的關系就是用戶ID為UserToID 我嘗試過交換它們,在這種情況下,集合僅包含用戶ID為UserFromID的關系。 似乎第二個綁定將覆蓋第一個綁定,而不是像我期望的那樣追加到第一個綁定。 我顯然做錯了。 我的問題是,是否有另一種方法可以執行此綁定,以便兩個鍵都按我想要的方式進行綁定,或者這是我將不得不實現的另一種方法嗎?

謝謝!

問題在於您使用了兩次相同的屬性,當然,第二個綁定將覆蓋第一個。 您必須在用戶模型上創建2個導航屬性,每個外鍵一個

modelBuilder.Entity<UserProfile>()
.HasMany(e => e.FromRelationships).WithRequired(e => e.UserFrom)
.HasForeignKey(e => e.UserFromID).WillCascadeOnDelete(false);
modelBuilder.Entity<UserProfile>()
.HasMany(e => e.ToRelationships).WithRequired(e => e.UserTo)
.HasForeignKey(e => e.UserToID).WillCascadeOnDelete(true);

在模型上,您將擁有類似的內容

public virtual List<Relationships> FromRelationships { get; set; }
public virtual List<Relationships> ToRelationships { get; set; }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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