【发布时间】:2021-09-17 05:24:02
【问题描述】:
我有两个具有一对多关系的实体。 Samurais 和 Quotes。一个武士可以有很多行情。
我在Samurai 表和Quote 表上都有一个DateModified 列。
我知道如何使用ChangeTracker 来遍历所有被跟踪的实体并发现哪些实体已被添加或修改。我在下面的SaveChanges() 方法中这样做:
public override int SaveChanges()
{
DateTime saveTime = DateTime.UtcNow;
// Update the createdDate and modifiedDate for all added entities
foreach (var entry in ChangeTracker.Entries().Where(e => e.State == EntityState.Added))
{
if (entry.Entity.GetType().GetProperty("CreatedDate") != null && (DateTime)entry.Property("CreatedDate").CurrentValue == DateTime.MinValue)
entry.Property("CreatedDate").CurrentValue = saveTime;
if (entry.Entity.GetType().GetProperty("ModifiedDate") != null)
entry.Property("ModifiedDate").CurrentValue = saveTime;
}
// Update the modifiedDate for all modified entities
foreach (var entry in ChangeTracker.Entries().Where(e => e.State == EntityState.Modified))
{
if (entry.Entity.GetType().GetProperty("ModifiedDate") != null)
entry.Property("ModifiedDate").CurrentValue = saveTime;
}
return base.SaveChanges();
}
当我将Quote 添加到Samurai 并调用SaveChanges() 时,仅添加了Quote。相关的Samurai 实体保持不变。如何访问相关的Samurai 实体并将EntityState 更改为已修改,以便我上面的代码将更新其DateModified 列?
【问题讨论】:
-
你会用这个修改后的武士做什么?
-
@CaiusJard 我不太明白你的问题。我将使用 modifiedDate 来跟踪增量变化。
-
但是 Samirai 没有改变,Quote 有.. 除非您制定业务规则,即对 Wuote 的更改就是对 Samurai 的更改,在这种情况下,我的问题是“为什么?”或者“你将如何处理这些信息?”例如,如果您想显示最近“因为 wuote 被更改而更改”的 samurai 的前 10 个列表,您可以只要求 db 获取每个 samurai 的最大报价日期,并为您提供前 10 个最近的最大报价日期;您不需要将其复制到武士中
标签: c# .net entity-framework-core