[英]Exclude Entities from SaveChanges
有人可以告诉我如何在保存更改之前从上下文中排除某些实体。
例如,我有2个实体“动作”和“用户”,我只想保存用户?
如果您更改了动作,而又不想修改它,则可以将其从上下文中分离出来,也可以将其设置为不变(例如hack)。
分离实体:
context.Detach(action);
将状态设置为不变:
context.ObjectStateManager.ChangeObjectState(action, EntityState.Unchanged);
请注意,如果您还更改了Action和User之间的关系,则还需要通过调用ObjectStateManager.ChangeRelationshipState
来重新设置关系的状态。
无论如何,您在做错事,因为这种情况不应该发生。 您应该始终只修改要保存的实体。 如果出于任何原因您只需要修改它们的一部分,那么使用克隆实体的方法并在其他上下文中进行修改是正确的。 上下文是工作单元。 您应该只修改属于同一业务交易的实体。
这是不可能的,因为SaveChanges
方法在上下文级别而不是实体级别起作用。
最好的选择是不要修改实体,除非您确实要更改它们。 但是,您可以更改其状态。 《编程实体框架》一书对此有详细介绍。
我通过创建带有所有子项(深层副本)的实体Action副本来解决此问题,当我更改它们时,我就在副本上工作。
您可以使用ObjectStateManager
将更改后的对象(在您的情况下为Action
类型)的状态更改为“未更改”,如下所示:
context.ObjectStateManager.ChangeObjectState(actionObject, EntityState.Unchanged);
我希望这有帮助 :)
ps:您可以使用以下命令获取已修改对象的列表:
var modifiedActions = context.Actions.Where(a=>a.EntityState!=EntityState.Unchanged);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.