使用linq时,外键为null(而不是)

本文关键字:null linq 使用 | 更新日期: 2023-09-27 18:28:21

我正在使用

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

以获取第一个可用项目。

然而,当提取时,s中的外键原来是null

我已经连接到数据库,看到外键不是null(而是1)。

为什么会变成null

使用linq时,外键为null(而不是)

假设这是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);