c# – 使用null参数调用失败
我有以下代码:
public static ContactEventValue GetContactEventValue(ContactEventType contactEventType,string programCode,string brandCode) { AdvocacyEntities ent = AdvocacyEntities.GetReadOnlyInstance(); ContactEventValue value = ent.ContactEventValues.SingleOrDefault( x => x.ContactEventTypeID == contactEventType.ContactEventTypeID && x.ProgramCode == programCode && x.BrandCode == brandCode); } 当我用brandCode和programCode的值调用它时,我从数据库中获得了预期的值.当我进行调用但显式设置x.ProgramCode和x.BrandCode为null时,我从数据库中获取预期的默认值: ContactEventValue value = ent.ContactEventValues.Single( x => x.ContactEventTypeID == contactEventType.ContactEventTypeID && x.ProgramCode == null && x.BrandCode == null); 但是,当我为programCode和brandCode调用null方法时,我从数据库中返回null! 我尝试根据此问题的答案将==更改为.Equals():Nullable optional parameter 所以x.BrandCode.Equals(brandCode)取代了x.BrandCode == brandCode,而x.ProgramCode.Equals(programCode)取代了x.ProgramCode == programCode,但仍然没有用. 我也试过用??运算符,仍然没有工作. 这个问题说没有找到解决方案,并且他/她必须使用存储过程:EF 4 Query – Issue with Multiple Parameters我真的不想去那里. 有任何想法吗? 解决方法
我不知道你正在使用什么版本的EF,但是null比较是版本5之前的问题.如果检查实际发出的SQL,你可能会看到查询中没有使用IS NULL .
在EF 6中,您将能够设置在DbContext上公开的UseDatabaseNullSemantics配置选项: public class MyContext : DbContext { public MyContext() { this.Configuration.UseDatabaseNullSemantics = true; } } 对于EF 5,您可以在基础ObjectContext上使用UseCSharpNullComparisonBehavior设置: public class MyContext : DbContext { public MyContext() { var objectContextAdapter = this as IObjectContextAdapter; objectContextAdapter. ObjectContext.ContextOptions.UseCSharpNullComparisonBehavior = true; } } 但是,您需要为项目使用.NET Framework 4.5.如果您不想使用4.5,则可以使用How can i query for null values in entity framework?中列出的解决方法之一. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |