2015-02-12 125 views
0

我正在使用實體框架。 我有這種情況:實體框架:在雙重相關對象上包含相關實體

Obj1: (ID (Primary key) , name) 
Obj2: (ID (Primary key) , FromID (foreign key obj1) , ToID (foreign key obj1) , quantity ) 

所以有OBJ1和OBJ2之間的關係2。 我想從obj1中選擇所有obj2和所有相關的。 我如何應包括:

1. context.obj2.Include("FromID").Tolist 
or 
2.context.obj2.include ("FromID").Include("ToID").Tolist 

因爲集合FromID和TOID可能全部或部分相同的項目。

謝謝!

回答

1

所以,在你的實體框架波蘇斯,你的模型類 - 你形容他們 - 會是這個樣子:

public class Obj1 
{ 
    public int ID { get; set;} 
    public string name { get; set; } 
} 

public class Obj2 
{ 
    public int ID { get; set; } 
    public int FromID { get; set; } 
    public int ToID { get; set; } 
    public int quantity { get; set; } 
} 

你描述將指示以下附加功能的按鍵,使用Data Annotations

public class Obj1 
{ 
    [Key] 
    public int ID { get; set;} 
    public string name { get; set; } 
} 

public class Obj2 
{ 
    [Key] 
    public int ID { get; set; } 
    public int FromID { get; set; } 
    public int ToID { get; set; } 
    public int quantity { get; set; } 
} 

您沒有在模型中明確提及任何導航屬性,但是您希望使用Include這一事實意味着您需要一些...我將爲您列出的每個外鍵關係添加一些ñ在關係的雙方avigation屬性 - 見InverseProperty and ForeignKey (attributes)

public class Obj1 
{ 
    public Obj1 
    { 
     Froms = new List<Obj2>(); 
     Tos = new List<Obj2>(); 
    } 

    [Key] 
    public int ID { get; set;} 
    public string name { get; set; } 

    [InverseProperty("From")] 
    public virtual ICollection<Obj2> Froms { get; set; } 

    [InverseProperty("To")] 
    public virtual ICollection<Obj2> Tos { get; set; } 
} 

public class Obj2 
{ 
    [Key] 
    public int ID { get; set; } 
    public int quantity { get; set; } 

    public int FromID { get; set; } 
    [ForeignKey("FromID")] 
    public virtual Obj1 From { get; set; } 

    public int ToID { get; set; } 
    [ForeignKey("ToID")] 
    public virtual Obj1 To { get; set; } 
} 

所以,現在我們都建立了模型類,我們可以看到,你們的關係 - 是1對多 - 實際上需要

var obj1sWithAllFromsAndTos = context.Obj1s 
            .Include(o => o.Froms) 
            .Include(o => o.Tos) 
            .ToList(); 

,而不是

var obj2s = context.Obj2.ToList(); 

這將已經包括各相關:走另一條路,只有當在其FromTo屬性。

相關問題