Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 非主键关系的建模_Sql Server_Entity Framework_Ef Code First_Data Modeling - Fatal编程技术网

Sql server 非主键关系的建模

Sql server 非主键关系的建模,sql-server,entity-framework,ef-code-first,data-modeling,Sql Server,Entity Framework,Ef Code First,Data Modeling,我试图建模以下关系,目的是首先为EF代码设计类 程序表: 样本数据 ProgramID ProgramName ClusterCode -------------------------------------- 1 Spring A 2 Fall A 3 Winter B 4 Summer B

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

程序表:

样本数据

ProgramID   ProgramName   ClusterCode  
--------------------------------------
    1       Spring            A  
    2       Fall              A  
    3       Winter            B  
    4       Summer            B  
群集表:

样本数据:

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'
请注意,对于程序表,ClusteCode不是唯一的

对于集群表,ClusterCode和ClusterDetail都不是唯一的


我将如何对此进行建模,以便能够首先利用导航属性和代码?

假设您已经映射了上述两个表并在它们之间建立了关联,并且您正在使用C,那么您可以使用一个简单的联接:


请添加语言标记C或VB.NET或ets。最好显示上面两个表映射的类,这样就不会回答您的问题,但这似乎更多的是数据库设计问题,而不是EF需要解决的问题。为什么不将程序表的ClusterCode字段替换为ClusterID字段,将其作为外键放入集群表中?好,但是没有办法对此进行建模以利用导航属性吗?因为我看不到表之间有任何PK/FK关系,也看不到实体之间有任何基于PK/FK关系的关联,所以很难使用导航属性,另外,我也不确定我的linq查询是否有效,如果不行的话,那么您必须根据如何在实体之间建立关系来对其进行一些更改,祝您好运。看来这将是一条必由之路。我对EF和代码还不熟悉,我想知道这是否可行。谢谢你的帮助。
ID   ClusterCode   ClusterDetails
---------------------------------
 1       A              10  
 2       A              20  
 3       A              30  
 4       B              20  
 5       B              40  
Select   
from Programs P
Join Cluster C On P.ClusterCode = C.ClusterCode  
Where P.ProgramID = 'xxx'
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);  
}