我有以下代码:
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():可空可选参数 https://stackoverflow.com/questions/6223657/linq-to-entities-nullable-optional-parameter
所以 x.BrandCode.Equals(brandCode) 替换了 x.BrandCode ==brandCode,x.ProgramCode.Equals(programCode) 替换了 x.ProgramCode == programCode,但这仍然不起作用。
我也尝试过使用 ??操作员,仍然没有工作。
这个问题说没有找到解决方案,他/她必须使用存储过程:EF 4 查询 - 多个参数的问题 https://stackoverflow.com/questions/4125512/ef-4-query-issue-with-multiple-parameters我真的不想去那里。
有任何想法吗?
我不知道您使用的是哪个版本的 EF,但 null 比较是版本 5 之前的一个问题。如果您检查实际发出的 SQL,您可能会看到IS NULL
查询中不使用。
在 EF 6 中,您将能够设置UseDatabaseNullSemantics
配置选项暴露于DbContext
:
public class MyContext : DbContext
{
public MyContext()
{
this.Configuration.UseDatabaseNullSemantics = true;
}
}
对于 EF 5,您可以使用UseCSharpNullComparisonBehavior
设置在底层ObjectContext
:
public class MyContext : DbContext
{
public MyContext()
{
var objectContextAdapter = this as IObjectContextAdapter;
objectContextAdapter.
ObjectContext.ContextOptions.UseCSharpNullComparisonBehavior = true;
}
}
但是,您的项目需要使用 .NET Framework 4.5。如果您不想使用 4.5,那么您可以使用以下列出的解决方法之一如何在实体框架中查询空值? https://stackoverflow.com/questions/682429/how-can-i-query-for-null-values-in-entity-framework.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)