建模非主键关系

Modeling a non-primary Key relationship

我正在尝试为以下关系建模,目的是首先为 EF 代码设计 类。

Program table:

ProgramID - PK  
ProgramName  
ClusterCode  

示例数据

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

Cluster table:

ID  
ClusterCode  
ClusterDetails  

示例数据:

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

我需要将 Program table 加入 Cluster table 以便我可以获得每个程序的集群详细信息列表。

SQL 将是

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

请注意,对于 Program table,ClusteCode 不是唯一的。

对于 Cluster table,ClusterCodeClusterDetail 都不唯一。

我该如何建模才能利用导航属性和代码优先?

假设您已经映射了两个表并在它们之间建立关联并且您正在使用 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);  
}