【问题标题】:Can I use UseCSharpNullComparisonBehavior for a single query?我可以对单个查询使用 UseCSharpNullComparisonBehavior 吗?
【发布时间】:2014-11-13 23:35:09
【问题描述】:

我有一个查询,它曾经是一个存储过程并被转换为一个 EF 查询。现在已经超时了。使用 SQL Profiler,我可以看到生成的 SQL 的唯一区别是 EF 将 entity.Property == value 转换为 (entity.Property = @value OR (@value IS NULL AND entity.Property IS NULL)) 的新行为。

我知道我可以通过设置UseCSharpNullComparisonBehavior = false 为整个上下文关闭此功能,但我真的只想为这一个查询执行此操作。这可能吗?

或者,有没有办法编写 EF 查询,这样它就不会生成这样的 SQL?

【问题讨论】:

  • 但是,你不能在执行查询之前设置context.Configuration.UseDatabaseNullSemantics = true;,然后关闭它吗?
  • 我想过,但如果同时运行另一个查询,我认为它也会影响该查询。
  • 并非如此。 DbContext 特别不适用于并发查询,如果您尝试,它会给您各种奇怪的错误。
  • 我明白了。我想我的印象是这是一个单身人士。我试试看。
  • 嗯,在您的情况下,您的上下文可能是一个单例,或者您的 DI 框架没有根据需要创建新的。但如果是这种情况,你应该非常小心!

标签: c# sql-server entity-framework entity-framework-6


【解决方案1】:

您可以将上下文的UseDatabaseNullSemantics 属性设置为true。这基本上与旧的 ObjectContext.UseCSharpNullComparisonBehavior 属性相反。

context.Configuration.UseDatabaseNullSemantics = true;

【讨论】:

  • 只是对其他人的提示,请确保您执行.ToList() 或运行查询的操作将其设置回false。我从我的函数中返回IEnumerable<>,所以查询直到我开始迭代它才运行,这是之后我将属性设置回false。哎呀:/
  • 好调用,处理延迟执行时经常有错综复杂的情况。
猜你喜欢
  • 1970-01-01
  • 2013-03-07
  • 2015-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多