[英]Entity Framework self referencing entity
我對實體框架有疑問。
public class User : Receiver
{
public User()
{
if (Groups == null)
Groups = new List<Group>();
if (Buddies == null)
Buddies = new List<User>();
}
[Required]
public string PhoneNumber { get; set; }
[ForeignKey("Guid"), JsonIgnore]
public IList<User> Buddies { get; set; }
[ForeignKey("Guid"), JsonIgnore]
public IList<Group> Groups { get; set; }
}
public class Receiver
{
public Receiver()
{
Guid = Guid.NewGuid();
Created = DateTime.Now;
}
[Key]
public Guid Guid { get; set; }
[Required]
public DateTime Created { get; set; }
}
當我嘗試添加用戶時...
User user = new User
{
Guid = new Guid("8cd094c9-e4df-494e-b991-5cf5cc03d6e3"),
PhoneNumber = "+4991276460"
};
cmc.Receivers.Add(user);
...它以以下錯誤結束。
類型“ System.Collections.Generic.List`1 [Project.Models.User]”的對象不能轉換為“ Project.Models.User”。
當我注釋掉以下兩行時:
[ForeignKey("Guid"), JsonIgnore]
public IList<User> Buddies { get; set; }
...程序運行正常。
我希望有人可以幫助我解決此問題。
否則,它將在此行發生錯誤: cmc.Receivers.Add(user);
在您的映射中...
[ForeignKey("Guid"), JsonIgnore]
public IList<User> Buddies { get; set; }
...您指定User.Buddies
是一對多關系的一部分,並且User.Guid
(= Receiver.Guid
)是此關系中的外鍵。 但是User.Guid
也是主鍵,因此它必須是唯一的。 結果, User
不能有一個Buddies
列表,而只能有一個參考。
映射沒有意義,但是異常不是很有幫助,很難理解。 (以某種方式,EF似乎在內部認識到Buddies
不能是具有該映射的列表,並且希望將該列表轉換為單個引用。在我看來,它應該首先檢測到該映射無效。)
為了正確的一對多映射,您需要一個與主鍵不同的外鍵。 您可以通過完全刪除[ForeignKey]
批注來實現...
[JsonIgnore]
public IList<User> Buddies { get; set; }
...在這種情況下,EF會在Receivers
表中創建一個默認外鍵(它將是一個帶有下划線的列,但是如果您不喜歡默認名稱,則可以使用Fluent API重命名)將自己的外鍵屬性添加到User
類:
public Guid? BuddyGuid { get; set; }
[ForeignKey("BuddyGuid"), JsonIgnore]
public IList<User> Buddies { get; set; }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.