2011-05-16 111 views
1

我有一個類似於這個example中的數據庫。不是學生課程場景,而是有兩個共同的三分之一相關的表格。實體框架。代碼第一。與表之間的關係

我的情況是,Items,PerformanceGraphItems和PerformanceGraphSeries。

每個項目可以有多個GraphItems,GraphItem屬於一個GraphSeries行。我如何在實體框架中對其進行建模,以便能夠訪問屬於某個Item的GraphSeries?

就是這樣。

public class Item 
    { 
     public int Id { get; set; } 
     public string Name { get; set; } 
     public virtual ICollection<PerformanceGraphItem> PerformanceGraphItems { get; set; } 


     public virtual ICollection<PerformanceGraphSeries> PerformanceGraphSeries { get; set; } 
    } 



public class PerformanceGraphItem 
    { 
     [Key] 
     public int Id { get; set; } 
     [ForeignKey("Item")] 
     public int ItemId { get; set; } 
     public int SeriesId { get; set; } 
     public short Year { get; set; } 
     public double RateOfReturn { get; set; } 
     public virtual Item Item { get; set; } 
     [ForeignKey("SeriesId")] 
     public virtual PerformanceGraphSeries PerformanceGraphSeries { get; set; } 

    } 


public class PerformanceGraphSeries 
    { 
     public int id { get; set; } 
     public string Name { get; set; } 
     public string Description { get; set; } 

     public virtual ICollection<PerformanceGraphItem> PerformanceGraphItems { get; set; } 

    } 

回答

2

在我看來,你所擁有的是非常接近你想要什麼,但我會改變你的

public virtual ICollection<PerformanceGraphSeries> PerformanceGraphSeries { get; set; } 

線改爲

public virtual IEnumerable<PerformanceGraphSeries> PerformanceGraphSeries 
{ 
    get 
    { 
     return PerformanceGraphItems.Select(pgi => pgi.PerformanceGraphSeries); 
    } 
} 

public virtual IEnumerable<PerformanceGraphSeries> PerformanceGraphSeries 
{ 
    get 
    { 
     return PerformanceGraphItems.Select(pgi => pgi.PerformanceGraphSeries) 
            .Distinct(); 
    } 
} 

取決於您的情況。

這是因爲你沒有真正建模一個數據庫,它在ItemPerformanceGraphSeries之間有直接連接 - 所以你不希望你的數據庫以這種方式生成。但是,這仍然允許您在一個屬性中訪問它(而不必在任何地方執行該查詢)。

而且,由於你在大多數地方使用virtual,我假設你試圖去代理對象 - 確保你設置所有你的屬性是虛擬的,否則也不會發生。

相關問題