2011-03-31 76 views
0

所以我有两个表,Table1和Table2。表1有一个整数,它是Table2标识列的外键,我将调用这个FK Table2ID。如果我执行此查询:Linq to EF不选择外键

var objs = (from t in DataContext.Table1 select t).Single(); 

objs.Table2.Table2ID为空。不过,我可以用这样的查询很容易地选择值:

var Table2ID = (from t in DataContext.Table1.Table2.Table2ID).Single(); 

如何选择回FK的表1中使用的第一个查询值,和为什么它不会自动复原?

回答

1

它看起来像延迟加载关闭出于某种原因,所以要尽量Include - 这应该工作:

var objs = (from t in DataContext.Table1.Include("Table2") select t).Single(); 

什么EF版本是你的工作?这是第一个代码还是数据库?

此外,当您通过导航属性访问相关实体时,您不使用FK - 您应该能够访问objs.Table2.Id,只要IdTable2实体的主键。

编辑:

这听起来像你没有勾选,包括你的模型外键 - 一定要添加。如果右键单击模型并选择“从数据库更新模型...”,您将看到以下对话框。

enter image description here

+0

数据库首先被设计,我转换到EF。如果我包含Table2,它会选择所有的数据?我只需要表1中Fk的值。 – 2011-03-31 02:13:32

+0

@Payson:FK列是'Table1'实体的一部分 - 在你的例子中它应该可以作为'objs.Table2Id'访问 - 你只是想要FK还是相应的'Table2'实体? – BrokenGlass 2011-03-31 02:17:13

+0

@BrokenGlass很遗憾,我没有选择objs.Table2Id的选项,但是我有表中的其他所有列,并且通过objs.Table2.Table2Id指向FK的路径。 – 2011-03-31 02:21:08