有办法去吗
关键词是
自动地
更多背景和例子
和
订购项目
(1-3个)。什么时候
订购项目
是从订单中添加/删除的,父级
秩序
自身需要更新以存储最后修改的时间戳。
public interface IModifiableEntity
{
DateTime LastModifiedOn { get; set; }
}
public class Order : IModifiableEntity
{
// some Order fields here...
// timestamp for tracking when the order was changed
public DateTime LastModifiedOn { get; set; }
// list of order items in a child collection
public ICollection<OrderItem> OrderItems { get; set; }
}
public class OrderItem
{
public int OrderId { get; set; }
// other order item fields...
}
public void AddOrderItem(OrderItem orderItem)
{
var order = _myDb.Orders.Single(o => o.Id == orderItem.OrderId);
order.OrderItems.Add(orderItem);
_myDb.SaveChanges();
}
SaveChanges
public override int SaveChanges()
{
var timestamp = DateTime.Now;
foreach (var modifiableEntity in ChangeTracker.Entries<IModifiableEntity>())
{
if (modifiableEntity.State == EntityState.Modified)
{
modifiableEntity.Entity.UpdatedOn = timestamp;
}
}
return base.SaveChanges();
}
IModifiableEntity
更新。然后,该实体的状态将标记为
Modified
SaveChanges()
上面将捕获它并正确设置时间戳字段。
问题是,如果仅与子集合属性交互,则父实体不会标记为
modified
英孚。我知道我可以手动通过
context.Entry(myEntity).State
或者只需手动设置
LastModifiedOn
字段在应用程序逻辑中添加子项时,但这不会集中完成,而且很容易忘记。
public void AddOrderItem(OrderItem orderItem)
{
var order = _myDb.Orders.Single(o => o.Id == orderItem.OrderId);
order.OrderItems.Add(orderItem);
// this works but is very manual and EF infrastructure specific
_myDb.Entry(order).State = EntityState.Modified;
// this also works but is very manual and easy to forget
order.LastModifiedOn = DateTime.Now;
_myDb.SaveChanges();
}
我是否可以集中执行此操作并通知EF需要将父子关系的“根”实体标记为已更新?