建模非主键关系

时间:2015-01-26 22:27:07

标签: sql-server entity-framework ef-code-first data-modeling

我试图模拟以下关系,目的是首先为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表,ClusterCodeClusterDetail都不是唯一的。

我如何对此进行建模,以便我可以利用导航属性和代码优先?

1 个答案:

答案 0 :(得分: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);  
}