我正在使用.NetCore2.0和EntityFrameworkCore。
执行以下操作时:
Expression<Func<Foobar, bool>> predicate =
x =>
query.Foos.Any(a => a.Contains(x.Foo)) &&
query.Bars.Any(s => s.Contains(x.Bar));
var results = GetAll().AsQueryable().Where(predicate);
我在控制台中收到以下警告消息:
警告:Microsoft.EntityFrameworkCore.Query [200500] LINQ表达式'Any()'无法转换,将在本地进行评估。 警告:Microsoft.EntityFrameworkCore.Query [200500] LINQ表达式'where [a] .Contains([x] .Foo)'无法翻译,将在本地进行评估 警告:Microsoft.EntityFrameworkCore.Query [200500] LINQ表达式'where [a] .Contains([x] .Bar)'无法翻译,将在本地进行评估
查询本身确实有效并返回我要查找的内容但是我想知道是否有办法避免这些警告或禁止它们
答案 0 :(得分:0)
在我们的系统上,启用此错误是我们方面的故意决定,并且是通过配置dbContextOptionsBuilder来完成的。我将粘贴我们如何将其打开,以便您可以找到它在系统中的位置:
services.AddDbContext<FooContext>(options =>
options.UseSqlServer(BarConnectionString,
sqlServerOptions => sqlServerOptions.CommandTimeout(300)).UseLazyLoadingProxies()
.ConfigureWarnings(warnings =>
warnings.Throw(Microsoft.EntityFrameworkCore.Diagnostics.RelationalEventId.QueryClientEvaluationWarning))
);
请注意,这实际上很有用,因为它标志着查询不会完全在服务器上运行,因此可能是性能问题。