2015-01-26 56 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