簡體   English   中英

實體框架自引用實體

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

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