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

问题描述

刚刚学习EF不久,有一个问题百思不得其解。希望大家能够帮助我,谢谢//1bool?boolVar=null;Barbar=entities.bars.SingleOrDefault(o=>p.variable==boolVar);//2Barbar=entities.bars.SingleOrDefault(o=>p.variable==null);Debug的时候发现bars这个DBSet里面存在我需要的唯一的bar对象。当执行语句1的时候,bar是null当执行语句2的时候,bar对象被正常返回。请问到底怎么回事?

解决方案

解决方案二:
你可以tostring一下看两句linq生成的sql有什么区别
解决方案三:
你用数据库中的sqlserverprofiler看一下生成的sql语句吧
解决方案四:
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语句
解决方案五:
根据两位的提示看了一下SQL.语句1会生成类似:extent1.variable=@p_linq_1作为查询条件语句2会生成类似:extent1.variableisnull作为查询条件可以看出不同了,可是仍旧不是很明白原因,我在语句1之前已经设置过了boolVar的值为null啊
解决方案六:
而且不知道为什么我试了试3楼的方法,没有办法编译,给出的错误是'System.Data.Entity.Database'doesnotcontainadefinitionfor'Log'andnoextensionmethod'Log'acceptingafirstargumentoftype'System.Data.Entity.Database'couldbefound(areyoumissingausingdirectiveoranassemblyreference?)
解决方案七:
你直接将linq语句toString然后调试停下来看就行了
解决方案八:
因为boolVar的数据类型是bool,虽然它支持赋值为null,但是不会转为isnull这样的判断语句,而只能是等号判断。
解决方案九:
除非是外键约束的字段,否则尽量不要在设计数据库时留下可为空的字段。
解决方案十:
引用4楼AHXYS的回复:

根据两位的提示看了一下SQL.语句1会生成类似:extent1.variable=@p_linq_1作为查询条件语句2会生成类似:extent1.variableisnull作为查询条件可以看出不同了,可是仍旧不是很明白原因,我在语句1之前已经设置过了boolVar的值为null啊

@p_linq_1用sqlserverprofiler,里面会有参数值的,看看参数是多少,然后看看sql语句是不是有细微的差别。你把两个语句完整的贴出来看看。
解决方案十一:
引用5楼AHXYS的回复:

而且不知道为什么我试了试3楼的方法,没有办法编译,给出的错误是'System.Data.Entity.Database'doesnotcontainadefinitionfor'Log'andnoextensionmethod'Log'acceptingafirstargumentoftype'System.Data.Entity.Database'couldbefound(areyoumissingausingdirectiveoranassemblyreference?)

Log方法是可以点出来的,是在EntityFramework.dll中的,我这边版本是6.0,你是不是没有引用ef包
解决方案十二:
引用10楼laokaizzz的回复:

Quote: 引用5楼AHXYS的回复:
而且不知道为什么我试了试3楼的方法,没有办法编译,给出的错误是'System.Data.Entity.Database'doesnotcontainadefinitionfor'Log'andnoextensionmethod'Log'acceptingafirstargumentoftype'System.Data.Entity.Database'couldbefound(areyoumissingausingdirectiveoranassemblyreference?)

Log方法是可以点出来的,是在EntityFramework.dll中的,我这边版本是6.0,你是不是没有引用ef包

我们用DBFirst的方法做的,然后反向工程到VS2012中的,我用的EF5.0用NuGet来安装的EF,并且在Reference中也有EntityFramework,配置文件里有对System.Data.Entity的引用,我感觉包应该没问题吧,毕竟如果没有引用包的话VS会自动提示帮你找的。可是Log完全找不到。
解决方案十三:
引用11楼AHXYS的回复:

Quote: 引用10楼laokaizzz的回复:
Quote: 引用5楼AHXYS的回复:
而且不知道为什么我试了试3楼的方法,没有办法编译,给出的错误是'System.Data.Entity.Database'doesnotcontainadefinitionfor'Log'andnoextensionmethod'Log'acceptingafirstargumentoftype'System.Data.Entity.Database'couldbefound(areyoumissingausingdirectiveoranassemblyreference?)

Log方法是可以点出来的,是在EntityFramework.dll中的,我这边版本是6.0,你是不是没有引用ef包

我们用DBFirst的方法做的,然后反向工程到VS2012中的,我用的EF5.0用NuGet来安装的EF,并且在Reference中也有EntityFramework,配置文件里有对System.Data.Entity的引用,我感觉包应该没问题吧,毕竟如果没有引用包的话VS会自动提示帮你找的。可是Log完全找不到。

不知道是不是5.0中没有,你可以在nuget中安装最新的6.0试试。不过5.0应该支持吧。我的代码是这样的:publicclassSysDb:DbContext{publicSysDb(stringconnString)://数据库链接字符串base(connString){Database.SetInitializer<SysDb>(null);//设置为空,防止自动检查和生成base.Database.Log=(info)=>Debug.WriteLine(info);}//...其他代码}
解决方案十四:
从升级内容来看,调试log输出是6.0才有的。

时间: 2024-07-28 17:36:13

求助一个EF的问题,谢谢大家的相关文章

数据库-求助一个关于mysql复制的问题

问题描述 求助一个关于mysql复制的问题 各位大神好: 小弟是个新人,接手一个现有系统的维护,因想弄套测试环境想把正在使用的mysql数据库在另一台机器上复制一个,倒腾半天无法成功,求大神答惑. 背景:原服务器是windows2003系统,新服务器的系统相同. 1.首先在新服务上安装了一个mysql数据库,由于不了解原来的数据库配置所以瞎配置了一通, 也就是在运行MySQLInstanceConfig.exe的时候选择的内容可能跟原来的不同. 2.将目标服务器上的mysql通过net stop

c语言-求助一个java语言的一个for循环语句

问题描述 求助一个java语言的一个for循环语句 for(int i=2,j=1; j<10; i=(i==9)?(((++j)/j)+1):(i+1)){ System.out.printf("%d*%d=%2d%c",i,j,i*j, ((i==9)?'n':' ')); } 输出结果是99乘法表. 这个for循环里的++j为什么不能换成j+1啊? 谢谢各位了. 解决方案 ++j是改变变量值的 j+1是不改变变量值的 解决方案二: ++j 等效于j=j+1 你用j+1 原j

c语言-求助一个for循环小问题

问题描述 求助一个for循环小问题 就是那个for循环里面&&ret是什么意思呀?我是大一新生 基础不好 谢谢各位了 解决方案 for循环中一个不容小觑的问题自己的工具类以及for循环的一个问题Oracle 11g r2 for linux(CentOS 6.4) 遇到的两个小问题 解决方案二: &&ret : &&是'且' 的意思 就是说,i<=k,并且ret=true 才执行语句块. 解决方案三: 在循环里判断的依据是布尔表达式.你说的那个是当i&

java-一个Java方法的问题,求助大神了,谢谢

问题描述 一个Java方法的问题,求助大神了,谢谢 先上代码 //父类 public abstract class Parent { public abstract void onSuccess(); public void Success(){ onSuccess(); } } //子类 public class child extends Parent { @Override public void onSuccess() { } } //调用 public class diaoyong {

求助一个毕业设计《手机销售网站》

问题描述 求助一个毕业设计<手机销售网站>,有好心朋友帮帮忙么?本人现在做android手机开发的,有兴趣的交个朋友,,我的QQ:773964842,电话:13951622371,联系我吧--谢谢啦-

参数传递-求助一个vb.net无法向NVelocity模板引擎传递参数的问题

问题描述 求助一个vb.net无法向NVelocity模板引擎传递参数的问题 我没找到vb.net的资料就用C#的翻译成了下面vb.net代码,我是想把一个类的实例作为参数传给模板,但模板并未收到son的数据,请各位前辈帮忙看看,字符串类型和数值类型都以传递,唯独类的实例不可以传递,代码如下: person类代码: Public Class person Public name As String Public age As Integer End Class html模板代码: <html>

求助一个vb.net中webbrowser的问题

问题描述 求助一个vb.net中webbrowser的问题 我用vb.net中的webbrowser提取超链接,代码如下: Timer1.Enabled = False Dim web As WebBrowser = WebBrowser1 For Each i As HtmlElement In web.Document.GetElementsByTagName("a") url = url + i.InnerText + i.GetAttribute("href"

求助一个ASP.NET网站上音频播放的问题

问题描述 求助一个ASP.NET网站上音频播放的问题我想在一个页面上点击一下button就会播放一小段音频(单词发音这类的),但是我找到很多都是直接在前台插入一段OBJECT的代码,求高手指导有没有点击button然后读取数据库中对应的音频路径,然后播放音频的方法,万分感谢! 解决方案 解决方案二:也可用C#去拼接html那段OBJECT代码把相关路径动态填充即可解决方案三:把相关路径动态填充即可这个过程如何操作啊....求指导.

c语言-求大神留步,帮小弟解答一个小问题。谢谢啦

问题描述 求大神留步,帮小弟解答一个小问题.谢谢啦 我是一名大学生,学习软件工程大数据方向,想问大神大概需要什么配置的电脑,显卡是核心显卡的是否可以学习,我不怎么玩游戏, 解决方案 只有学美工和3D游戏模型的才需要好的显卡.软工方向不会要求电脑的显卡配置高. 1.如果不确定自己将来在什么平台工作,建议你买windows系统的电脑(因为可能你以后会对ios编程感兴趣).能买win7尽量不要win10.win8不考虑(朋友的mysql安装在win8上出了很多次问题,貌似win8.1好多了,还是建议不