使用linq时,外键为空(但不是)

时间:2012-03-18 16:22:33

标签: c# linq

我正在使用

var s = db.sModels.ToList().First(r => r.Status == CustomStatus.Available);

获取第一个可用项目。

但是,在提取时,s中的外键变为null

我已连接到数据库并发现外键不是null(但是1)。

为什么会变成null

1 个答案:

答案 0 :(得分:4)

假设这是Linq to Entities - 这是默认行为 - 如果你想实现相关实体 - 让我们说SomeEntity你可以使用Include查询,在这种情况下,FK和实体将填充:

var s = db.sModels.Include(r=> r.SomeEntity)
                  .First(r => r.Status == CustomStatus.Available);

对于没有使用Include查询来检索FK的解决方法,请参阅此博文:"Getting Foreign Key Values with Linq-to-Entities"

正如对Linq to Entities目前不支持枚举的问题的评论所述,因此上面实际上不会按原样运作。作为一种解决方法(直到EF 5),您现在可以在DB上使用整数:

int statusAvailable = (int) CustomStatus.Available;
var s = db.sModels.Include(r=> r.SomeEntity)
                  .First(r => r.Status == statusAvailable);