【发布时间】: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