C# 使用linq时,外键为空(而不是空)
我正在使用 var s = db.sModels.ToList().First(r => r.Status == CustomStatus.Available); var s=db.sModels.ToList().First(r=>r.Status==CustomStatus.Available); 获取第一个可用项 但是,在提取时,C# 使用linq时,外键为空(而不是空),c#,linq,C#,Linq,我正在使用 var s = db.sModels.ToList().First(r => r.Status == CustomStatus.Available); var s=db.sModels.ToList().First(r=>r.Status==CustomStatus.Available); 获取第一个可用项 但是,在提取时,s中的外键结果是null 我已连接到数据库,并看到外键不是null(而是1) 为什么会变成null?假设这是实体的Linq-这是默认行为-如果您想具体化相关实体-
s
中的外键结果是null
我已连接到数据库,并看到外键不是null
(而是1
)
为什么会变成
null
?假设这是实体的Linq-这是默认行为-如果您想具体化相关实体-比如说SomeEntity
,您可以使用Include
查询,在这种情况下,将填充FK和实体:
var s = db.sModels.Include(r=> r.SomeEntity)
.First(r => r.Status == CustomStatus.Available);
有关不使用包含查询仅检索FK的解决方案,请参阅以下博文:
正如在对问题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);
假设这是Linq to Entities-这是默认行为-如果您想具体化相关实体-比如说
SomeEntity
,您可以使用Include
查询,在这种情况下,将填充FK和实体:
var s = db.sModels.Include(r=> r.SomeEntity)
.First(r => r.Status == CustomStatus.Available);
有关不使用包含查询仅检索FK的解决方案,请参阅以下博文:
正如在对问题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);
为什么在第一次调用
之前调用.ToList()
?这可能不是问题的根源,但这是徒劳的。@Tim s.因为否则将出现不受支持的异常。(LINQ to Entities中不支持指定的类型成员“Status”。只支持初始值设定项、实体成员和实体导航属性。)为什么在第一次之前调用.ToList()
?这可能不是问题的根源,但这是徒劳的。@Tim s.因为否则将出现不受支持的异常。(LINQ to实体中不支持指定的类型成员“状态”。只支持初始值设定项、实体成员和实体导航属性。)神奇!您是否介意进一步告诉我为什么外键默认为null
?我想这只是EF团队的设计决定-EF 5也将为enum提供支持,因此您不需要解决ToList()
-这将是一个性能阻力。在那之前,我会在数据库中使用整数值,而不是具体化所有结果。太神奇了!您是否介意进一步告诉我为什么外键默认为null
?我想这只是EF团队的设计决定-EF 5也将为enum提供支持,因此您不需要解决ToList()
-这将是一个性能阻力。在此之前,我将在数据库中使用整数值,而不是具体化所有结果。