如何在EF 5中执行简单的多对多

时间:2014-09-19 11:03:21

标签: c# entity-framework-5

我有一组足够简单的表,在典型的多对多关系中。

TableA => TableAB< = TableB

TableAB具有包含TableAID和TableBID的化合物PK。

我希望获得一个TableB的列表,给出一个TableAID sql看起来像:

select *
from tableA A
inner join TableAB AB
on A.AID = AB.AID
inner join TableB B
on AB.BID = B.ID
where A.ID = 5

我知道这看起来很基本,但我现在尝试使用实体框架5和MVC 4 lambdas工作几个小时。

到目前为止,我的代码看起来像这样(大多数错误):

Entities db = new Entities()

public List<TableB> GetBData(int AID)
{
    var tableAdata = db.TableA.Where(a => a.AID == AID)

    List<TableAB> tableB = new List<TableB>();
    foreach (var a in tableAData)
         tableB.BID = db.TableB.BID
}

我在想,必须有办法将表A的ID传递给它,然后将该表与链接表链接并返回其中存在的所有BID,然后使用BID&#39; s返回(0到多)以从B表中获取数据。

我教过这可能是菊花链接多个where子句,但我不知道怎么做,所以我要求指导。

只是为了澄清......我首先在SQL Server 2012中设置此模型(因此不首先使用代码),然后将EF5放入我的MVC4项目中。所以EF5在模型编码方面做了很多事情。我没有改变或添加EF5对其模型所做的任何事情。但我愿意做出任何需要的改动。

提前致谢。

1 个答案:

答案 0 :(得分:1)

我认为简单地使用LINQ语法会更容易:

var result = from a in db.TableA
             join ab in db.TableAB on a.AID equals ab.AID
             join b in db.TableB on ab.BID equals b.BID
             where a.AID == 5
             select b;

当然你可以使用静态的Enumerable扩展方法来编写 - 实际上这是编译器所做的 - 但是由于你必须创建一些对象来存储每个连接操作的结果,所以更难。所以我只是让编译器为你做这件事。