繁体   English   中英

从SaveChanges中排除实体

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM