2015-01-26 53 views
1

我想要首先爲EF代碼設計類的目的來模擬以下關係。對非主鍵關係建模

Program表:

ProgramID - PK 
ProgramName 
ClusterCode 

樣本數據

ProgramID ProgramName ClusterCode 
-------------------------------------- 
    1  Spring   A 
    2  Fall    A 
    3  Winter   B 
    4  Summer   B 

Cluster表:

ID 
ClusterCode 
ClusterDetails 

樣本數據:

ID ClusterCode ClusterDetails 
--------------------------------- 
1  A    10 
2  A    20 
3  A    30 
4  B    20 
5  B    40 

我需要將Program表加入Cluster表,以便我可以獲取每個程序的羣集詳細信息列表。

的SQL將

Select 
from Programs P 
Join Cluster C On P.ClusterCode = C.ClusterCode 
Where P.ProgramID = 'xxx' 

注意,對於Program表,ClusteCode不是唯一的。

對於Cluster表,既不是ClusterCode也不是ClusterDetail是唯一的。

我該如何建模,這樣我就可以利用導航屬性和代碼優先?

+0

請加標記語言(C#或VB.NET或ETS)也最好是顯示映射在2個表上的類 – jfun 2015-01-26 22:57:28

+0

因此,這不會回答你的問題,但這似乎更像是一個數據庫設計問題,而不是EF要解決的問題。爲什麼不使用ClusterID字段替換Program表的ClusterCode字段作爲Cluster表中的外鍵? – Fiddles 2015-01-26 23:27:21

回答

0

假設你有以上兩個表映射,使它們之間的關聯,並且您使用C#,你可以使用一個簡單join

List<Sting> clustedDets=new ArrayList<String>(); 

var q = 
    from p in ClusterTable 
    join c in Program on p equals c.ClusterTable 
    select new { p.ClusterDetails }; 

foreach (var v in q) 
{ 
    clustedDets.Add(v.ClusterDetails); 
} 
+0

好的,但是沒有辦法對此進行建模以利用導航屬性? – user4496468 2015-01-27 13:31:05

+0

,因爲我沒有看到你的表之間有任何PK/FK關係,也沒有在你的實體之間基於它的任何關聯,所以它很難使用導航屬性,我也不確定我的linq查詢是否有效,如果不是的話你必須根據你如何在實體之間建立關係來改變它,祝你好運。 – jfun 2015-01-27 15:47:44

+0

看起來這將是需要走的路。我是EF和Code的第一人,並試圖弄清楚這是否可能。謝謝您的幫助。 – user4496468 2015-01-27 22:01:47