如何使用EF和linq在多个表中获取数据?

时间:2014-08-12 21:23:22

标签: c# .net linq entity-framework

我有一个相当简单的数据库结构,TableA连接到TableB连接到TableC,我只想得到一个linq语句来获取填充的数据对象。为什么这么难?

我有类似的东西

TableA
ID (pk)

TableB
ID
TableAID (yes this is a fk to TableA)
TableCID (yes this is a fk to TableC)

TableC
ID (pk)

现在,我正在尝试

var SomeVar = context.Include(t=>t.AnotherTable)
.Include(t => t.YetAnotherTable)
.Include(t => t.TableB)
.Include(t => t.TableC)

或者

.Include(t=>t.TableB.TableC)

但是当我运行这些时,没有工作,导航道具的错误就不存在了。我怎么得到这个?我们将不胜感激任何帮助?!

1 个答案:

答案 0 :(得分:0)

我不知道.include()方法适用于db上下文本身,所以我可能完全误解了这个问题。

看起来您正在考虑SQL JOIN语句,而不是EF的工作方式。让它照顾你。假设TableA,TableB和TableC都具有适当的导航属性,那么执行以下操作:

int myKey = 12345;
TableB myObject = context.TableBs.Where(b => b.ID == myKey).First();

此时变量" myObject"是TableB类型,具有以下属性:ID,TableA,TableB。因此,如果TableA有一个名为" Name"你可以访问它作为myObject.TableA.Name。如果你想在没有往返服务器的情况下这样做,你可以这样写:

TableB myObject = context.TableBs.Include(b => b.TableA).Where(b => b.ID == myKey).First();

这是"渴望加载"但是没有必要从相关表中获取数据。