我想在我的数据库表中存储一个带有时间估计的类。 这有几个字段:
为了计算结果,我在我的类中添加了另一个名为“Estimated”(Timespan)的属性,该属性由以下公式计算:(BestCase + 4 * MostLikely + WorstCase)/ 6.
为了在获得大量估算时减少计算量,我想将此字段也存储在数据库表中。 (所以存储计算结果)
我该怎么做? (使用ModelBuilder,还是通过更改属性?)
我想在这种情况下,结果总是在读取属性时计算出来?
public TimeSpan Estimated
{
get => (BestCase + 4 * MostLikely + WorstCase) / 6;
set { }
}
答案 0 :(得分:0)
将实体类getter和setter保留为默认值可能更好。
尝试按照示例here给出其中一条路径。
最简单的恕我直言,是以下解决方案。
覆盖SaveChanges
类中的SaveChangesAsync
和DbContext
,以使用包含以下代码的方法:
var entries = ChangeTracker.Entries();
foreach (var entry in entries)
{
if (entry.Entity is #insert type of your object#)
{
entry.Entity.Estimated = (BestCase + 4 * MostLikely + WorstCase) / 6;
}
}
备注:请注意,使用此解决方案时,如果您创建实体并在保存到数据库之前在上下文中使用该值,则不会设置该值。 您可以使用解决方案在get:上的值为空的情况下提供值:在getter中,检查是否有值。如果没有,请进行计算。