求助一个EF的问题,谢谢大家

AHXYS 2014-06-26 10:38:58
刚刚学习EF不久,有一个问题百思不得其解。希望大家能够帮助我,谢谢

//1
bool? boolVar = null;
Bar bar = entities.bars.SingleOrDefault(o => p.variable == boolVar);

//2
Bar bar = entities.bars.SingleOrDefault(o => p.variable == null);

Debug的时候发现bars这个DBSet里面存在我需要的唯一的bar对象。

当执行语句1的时候,bar是null

当执行语句2的时候,bar对象被正常返回。

请问到底怎么回事?
...全文
647 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
EthanJiang0827 2014-07-24
  • 打赏
  • 举报
回复
从升级内容来看,调试log输出是6.0才有的。
AHXYS 2014-07-01
  • 打赏
  • 举报
回复
引用 10 楼 laokaizzz 的回复:
[quote=引用 5 楼 AHXYS 的回复:] 而且不知道为什么 我试了试3楼的方法, 没有办法编译,给出的错误是 'System.Data.Entity.Database' does not contain a definition for 'Log' and no extension method 'Log' accepting a first argument of type 'System.Data.Entity.Database' could be found (are you missing a using directive or an assembly reference?)
Log方法是可以点出来的,是在 EntityFramework.dll 中的,我这边版本是 6.0,你是不是没有引用 ef包[/quote] 我们用DB First的方法做的,然后反向工程到VS2012中的,我用的EF5.0 用NuGet来安装的EF,并且在Reference中也有EntityFramework,配置文件里有对System.Data.Entity的引用,我感觉包应该没问题吧,毕竟如果没有引用包的话VS会自动提示帮你找的。可是Log完全找不到。
laokaizzz 2014-07-01
  • 打赏
  • 举报
回复
引用 11 楼 AHXYS 的回复:
[quote=引用 10 楼 laokaizzz 的回复:] [quote=引用 5 楼 AHXYS 的回复:] 而且不知道为什么 我试了试3楼的方法, 没有办法编译,给出的错误是 'System.Data.Entity.Database' does not contain a definition for 'Log' and no extension method 'Log' accepting a first argument of type 'System.Data.Entity.Database' could be found (are you missing a using directive or an assembly reference?)
Log方法是可以点出来的,是在 EntityFramework.dll 中的,我这边版本是 6.0,你是不是没有引用 ef包[/quote] 我们用DB First的方法做的,然后反向工程到VS2012中的,我用的EF5.0 用NuGet来安装的EF,并且在Reference中也有EntityFramework,配置文件里有对System.Data.Entity的引用,我感觉包应该没问题吧,毕竟如果没有引用包的话VS会自动提示帮你找的。可是Log完全找不到。[/quote] 不知道是不是 5.0 中没有,你可以在nuget中安装最新的6.0 试试。不过5.0应该支持吧。 我的代码是这样的: public class SysDb : DbContext { public SysDb(string connString) : // 数据库链接字符串 base(connString) { Database.SetInitializer<SysDb>(null);//设置为空,防止自动检查和生成 base.Database.Log = (info) => Debug.WriteLine(info); } //...其他代码 }
laokaizzz 2014-06-27
  • 打赏
  • 举报
回复
引用 5 楼 AHXYS 的回复:
而且不知道为什么 我试了试3楼的方法, 没有办法编译,给出的错误是 'System.Data.Entity.Database' does not contain a definition for 'Log' and no extension method 'Log' accepting a first argument of type 'System.Data.Entity.Database' could be found (are you missing a using directive or an assembly reference?)
Log方法是可以点出来的,是在 EntityFramework.dll 中的,我这边版本是 6.0,你是不是没有引用 ef包
laokaizzz 2014-06-27
  • 打赏
  • 举报
回复
引用 4 楼 AHXYS 的回复:
根据两位的提示看了一下SQL. 语句1会生成类似: extent1.variable = @p_linq_1 作为查询条件 语句2会生成类似: extent1.variable is null 作为查询条件 可以看出不同了,可是仍旧不是很明白原因,我在语句1之前已经设置过了boolVar 的值为null啊
@p_linq_1 用sql server profiler,里面会有参数值的, 看看参数是多少,然后看看sql语句是不是有细微的差别。你把两个语句完整的贴出来看看。
bwangel 2014-06-27
  • 打赏
  • 举报
回复
除非是外键约束的字段,否则尽量不要在设计数据库时留下可为空的字段。
save4me 2014-06-27
  • 打赏
  • 举报
回复
因为boolVar的数据类型是bool,虽然它支持赋值为null,但是不会转为is null这样的判断语句,而只能是等号判断。
romanchaos 2014-06-27
  • 打赏
  • 举报
回复
你直接将linq语句toString然后调试停下来看就行了
AHXYS 2014-06-26
  • 打赏
  • 举报
回复
而且不知道为什么 我试了试3楼的方法, 没有办法编译,给出的错误是 'System.Data.Entity.Database' does not contain a definition for 'Log' and no extension method 'Log' accepting a first argument of type 'System.Data.Entity.Database' could be found (are you missing a using directive or an assembly reference?)
AHXYS 2014-06-26
  • 打赏
  • 举报
回复
根据两位的提示看了一下SQL. 语句1会生成类似: extent1.variable = @p_linq_1 作为查询条件 语句2会生成类似: extent1.variable is null 作为查询条件 可以看出不同了,可是仍旧不是很明白原因,我在语句1之前已经设置过了boolVar 的值为null啊
moonwrite 2014-06-26
  • 打赏
  • 举报
回复
entities.bars.SingleOrDefault(o => p.variable == boolVar); context.Database.Log = log => System.Diagnostics.Debug.WriteLine(log); entities.bars.SingleOrDefault(o => p.variable == null); context.Database.Log = log => System.Diagnostics.Debug.WriteLine(log); 在VS中左下角的 输入 窗口中可以看到生成的sql语句
laokaizzz 2014-06-26
  • 打赏
  • 举报
回复
你用数据库中的sql server profiler 看一下生成的sql语句吧
romanchaos 2014-06-26
  • 打赏
  • 举报
回复
你可以tostring一下看两句linq生成的sql有什么区别

8,494

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 LINQ
社区管理员
  • LINQ
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧