2013-03-01 27 views
-1

集合具有卡片和集合。下面是我在我的模型中,使用EF代碼第一次:無法確定關係的原則結束 - 多個添加的實體可能具有相同的主鍵

public class Set 
{ 
    // Primitive Properties 
    [Required] 
    [Key] 
    public virtual int SetId { get; set; } 

    // Navigation Properties 
    [Required] 
    public virtual List<Set> Sets { get; set; } 

    // Navigation Properties 
    [ForeignKey("ParentSet")] 
    public int ParentSetId { get; set; } 
    public virtual Set ParentSet { get; set; } 
} 

那麼對於卡:

public class Card 
{ 
    // Primitive Properties 
    [Required] 
    [Key] 
    public virtual int CardId { get; set; } 

    // Navigation Properties 
    [Required] 
    [ForeignKey("ParentSet")] 
    public int ParentSetId { get; set; } 
    public virtual Set ParentSet { get; set; } 
} 

我試圖使用從包管理器控制檯「更新數據庫」重建數據庫這是我得到的錯誤:

無法確定 'App.Core.Set_ParentSet'關係的主體末端。多個添加的實體 可能具有相同的主鍵。

任何想法爲什麼?

+0

我沒有在Set表中找到關係。 uml模型會是什麼樣子?爲什麼一組需要自己的列表? – 2013-03-01 18:19:23

+0

集合將自引用...因爲集合可以有多個集合。就像一個盒子可以有很多盒子,可能屬於一個盒子。這是否允許? – RobVious 2013-03-01 18:20:28

+0

我不確定。我不知道EF如何調和這種關係。我會考慮從PrimarySet中分別定義ParentSets和/或SubSet。 – 2013-03-01 18:24:21

回答

1

對我來說,在Set實體中沒有任何意義。它不能引用自身需要

// Navigation Properties 
[Required] 
public virtual List<Set> Sets { get; set; } 

如果Set必須具有的Sets列表,你怎麼能創建第一個Set

需要注意的是從什麼寫在錯誤時,它無關的卡類

+0

感謝Mathieu的幫助。我試圖確保List <>被實例化,因此在執行像Sets.Count之類的東西之前,我不必檢查isNull。該列表應該始終存在,但並不總是有集合。思考? – RobVious 2013-03-01 18:19:22

+0

我之前嘗試過在同一個實體內部的關係。它不起作用。你最好擁有一個屬性'公共虛擬整數? ParentSetId {get;組; }' – Mathieu 2013-03-01 18:24:03

+0

我刪除了Required並且仍在發生。請注意,在我指定ForeignKey屬性之前,沒有發生這種情況......我應該將它關閉並繼續運行嗎? – RobVious 2013-03-01 22:46:35

0

如果你只是想避免有一個新實例Set零誤差不Sets,然後適當的處理這種情況的方法是在構造函數中實例化Sets

public class Set 
{ 
    public Set() 
    { 
     Sets = new List<Set>(); 
    } 

    ... 
} 
相關問題