0
實體框架對此特定場景中的數據註釋更改沒有反應,所以我想嘗試通過Fluent API,這是我從不使用的。通過Fluent API創建EF外鍵
我有一個模型「Transfer」,它有三個屬性 - 它的Id和「TransferredFromId」和「TransferredToId」屬性,它們表示用戶(另一個EF模型)參與傳輸。像這樣:
public class Transfer
{
public long Id { get; set; }
public long TransferredFromId { get; set; }
[ForeignKey("TransferredFromId")]
public User TransferredFrom { get; set; }
public long TransferredToId { get; set; }
[ForeignKey("TransferredToId")]
public User TransferredTo { get; set; }
}
用戶模型目前看起來是這樣的:
public class User
{
public long Id { get; set; }
[InverseProperty("TransferredFrom")]
public ICollection<Transfer> TransferredFroms { get; set; }
[InverseProperty("TransferredTo")]
public ICollection<Transfer> TransferredTos { get; set; }
}
注 - 我認爲用戶可以這個樣子,它仍然能工作:
public class User
{
public long Id { get; set; }
}
我如何通過Fluent API實現完全相同的目標?
爲了澄清,我想有一個轉移表,它有兩個屬性,它們都代表Users表中的Id。
臨時編輯:當我切換到Fluent API時,我的模型應該是這樣嗎?
public class Transfer
{
public long Id { get; set; }
public long TransferredFromId { get; set; }
public long TransferredToId { get; set; }
}
和
public class User
{
public long Id { get; set; }
}
,然後在上下文中添加此?
modelBuilder.Entity<Transfer>().HasRequired(x => x.TransferredFrom).WithMany(x => x.TransferredFroms).HasForeignKey(x => x.TransferredFromId);
modelBuilder.Entity<Transfer>().HasRequired(x => x.TransferredTo).WithMany(x => x.TransferredTos).HasForeignKey(x => x.TransferredToId);
謝謝你的回答。我似乎理解第二種選擇,但不是第一種。在哪裏指向用戶表?另外,我應該在原始模型中留下什麼?我暫時編輯了我的問題來解釋我的意思。 – VSO
您的導航屬性指向用戶表,即TransferredFrom,TransferredTo。你應該在模型中保留這些導航屬性,也是相反的。數據註釋可以被刪除。如果你想使用較少的導航屬性,你可以在用戶表中跳過一個,如果你刪除了兩個,那麼EF會對哪個導航屬性使用哪個鍵感到困惑(即使你正確配置) – DevilSuichiro
非常感謝。/PL – VSO