【发布时间】:2020-09-30 12:07:05
【问题描述】:
关于如何避免通过 Entity Framework(第 6 版 - 还不是 Core,遗憾的是)查询的数据出现空错误,我有一个长期亟待解决的问题。
假设您有一个表 Employees,它与另一个表 EmployeePayments 有关系(一个员工有很多员工付款)。
在您的Employee 域对象上,您创建一个属性TotalPayments,它依赖于您为该对象加载了EmployeePayments。
我尽量确保每次进行查询时,我都会“包含”依赖项,例如:
var employees = context.Employees.Include(e => e.EmployeePayments);
问题是,我在这个地方有很多查询(我使用通用存储库模式,所以我从我的服务库中调用像 GetAll 或 GetSingle 这样的存储库函数),所以很多地方要记住添加包含。如果我不包含它们,那么如果使用了 TotalPayments 属性,我将面临出现空异常的风险。
处理这个问题的最佳方法是什么?
注意 1:我们有很多表,我真的不想为每个表恢复使用特定的存储库,我们以多种方式利用通用存储库....但我会很高兴听到对替代方案的有力论据:)
注意 2:出于性能原因,我没有开启延迟加载,也不打算开启它。
【问题讨论】:
-
您的问题是如何修复 TotalPayments 属性以避免空异常,或者如何使用通用存储库模式设置包含?
-
在 EF Core 中,所有查询都流经github.com/dotnet/efcore/blob/…。可能有一种方法可以将预处理器挂接到管道中以应用约定...
-
你能在导航属性的定义上调用
.Metadata.PrincipalToDependent.SetIsEagerLoaded(true)吗? (想法来自stackoverflow.com/questions/54041802/…) -
这看起来很有趣@JeremyLakeman,我会看看我能用它实现什么。
标签: c# entity-framework