EF Core具有a feature,当无法在数据库上执行查询时,它可以在内存中评估查询的一部分。发生这种情况时,它将记录警告。
可以选择将EF Core配置为在发生异常时引发异常
optionsBuilder
.UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=EFQuerying;Trusted_Connection=True;")
.ConfigureWarnings(warnings => warnings.Throw(RelationalEventId.QueryClientEvaluationWarning)); // <--
由于评估内存中的内容使程序员打算在数据库中执行的工作可能是一个巨大的performance issue,而且有些不干净,我现在正在考虑随时随地使用此异常配置。 / p>
我只是想知道是否有充分的理由不抛出异常?我个人更希望有一个异常,然后更改要在内存中有意执行的代码(例如,在有问题的语句之前使用.ToList()
)。我很奇怪,EF只能解决这样的设计缺陷。
但是我不确定我是否忘记了为什么存在此理由的任何正当理由或可能需要这样做的任何情况。
答案 0 :(得分:2)
不引发异常的一个很好的理由是,当您使用非关系数据库时,必须在其中进行数据处理和搜索代码。另一种情况是,如果您使用linq查询合并来自多个源的数据-内存中的数据结构,XML,数据库,并且希望仅从这些源中读取数据并执行代码中的所有处理。
但是,当您仅将关系数据库作为目标时,应该始终抛出。