Sql server 非主键关系的建模
我试图建模以下关系,目的是首先为EF代码设计类 程序表: 样本数据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
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);
}