实体框架与(1对多) - (多对1)(1 - * * - 1)关系

时间:2011-06-12 13:16:55

标签: c# asp.net entity-framework sql-server-2008 entity-framework-4

我有一段时间难以弄清楚如何从数据表中获取数据(MSSQL 2008)。问题是这个。你有3个表:

  • TABLE1(作业):JobID,JobName
  • TABLE2(Worker):WorkerID,WorkerName
  • TABLE3(Worker2Job):RowID,WorkerID,JobID

我假设JOB可以由许多工作人员完成,所以我需要“Worker2Job”表。所以我可以输入JobID:1由WorkerID1和WorkerId2等...

现在使用Entity框架我不知道如何获取第一个worker(也没有任何其他worker列表)的“WorkerName”属性。

任何想法?! Thx提前!

1 个答案:

答案 0 :(得分:1)

RowId中不需要任何特殊Worker2Job。只需使用两列Worker2JobWorkerId定义JobId,并将这两列作为表的复合主键。将所有三个表添加到实体设计器后,它将自动查看多对多关系,并在模型中仅创建两个具有正确关系的实体。 Worker实体将拥有Jobs导航属性,Job将拥有Workers导航属性。您将能够编写如下查询:

var query = context.Jobs.Include("Worker").Where(j => j.JobId == someId);

此类查询将为所有相关工作人员加载作业,您将可以访问其名称。