EF Core:不抛出 QueryClientEvaluationWarning 的任何理由

Mat*_*ias 5 c# entity-framework entity-framework-core .net-core

EF Core 有一个功能,当查询的部分无法在数据库上执行时,它可以在内存中评估该部分。发生这种情况时,它会记录警告。

(可选)EF Core 可以配置为在发生这种情况时抛出异常

optionsBuilder
    .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=EFQuerying;Trusted_Connection=True;")
    .ConfigureWarnings(warnings => warnings.Throw(RelationalEventId.QueryClientEvaluationWarning)); // <--
Run Code Online (Sandbox Code Playgroud)

由于评估程序员打算在数据库中执行的内存中的某些内容可能会是一个巨大的性能问题,并且有些不干净,恕我直言,我现在正在考虑随时随地使用此异常配置。

我只是想知道是否有任何充分的理由不抛出异常?我个人更喜欢一个异常,然后更改要在内存中有意执行的代码(例如,在.ToList()有问题的语句之前添加一个)。对我来说很奇怪的是 EF 会解决这样的设计缺陷。

然而,我不确定我是否忘记了它首先存在的任何充分理由或任何可能需要这样做的情况。

Nic*_*ick 4

不抛出异常的一个很好的理由是当您使用非关系数据库并且必须在代码中进行数据处理和搜索时。另一种情况是,如果您使用 linq 查询来组合来自多个源(内存中数据结构、XML、数据库)的数据,并且您希望仅从这些源中读取数据并在代码中进行所有处理。

然而,当您仅针对关系数据库时,您应该始终抛出。