从SaveChanges中排除实体

时间:2011-03-18 23:14:05

标签: c# .net entity-framework

有人可以告诉我如何在保存更改之前从上下文中排除某些实体。

例如,我有2个实体操作和用户,我想只保存用户?

5 个答案:

答案 0 :(得分:1)

我改变了一个Action并且你不想修改它你可以将它从上下文中分离出来或者将它设置为未更改(就像hack一样)。

分离实体:

context.Detach(action);

将状态设置为不变:

context.ObjectStateManager.ChangeObjectState(action, EntityState.Unchanged);

请注意,如果您还更改了“操作”和“用户”之间的关系,则还需要通过调用ObjectStateManager.ChangeRelationshipState来重新生成关系状态。

无论如何,你做错了,因为这种情况不应该发生。您应该始终只修改要保存的实体。如果出于任何原因,您只需要修改其中的一部分,您使用克隆实体的方法并在其他上下文中修改它们是正确的。语境是工作单元。您应该只修改属于同一业务事务的实体。

答案 1 :(得分:0)

这是不可能的,因为SaveChanges方法适用于上下文级别,而不适用于实体级别。

答案 2 :(得分:0)

最好的选择是不修改实体,除非你真的想改变它们。但是你可以改变他们的状态。 “编程实体框架”一书详细介绍了这一点。

答案 3 :(得分:0)

我通过创建具有所有子项(深层副本)的实体Action的副本来解决这个问题,当我更改它们时,我在副本上工作。

答案 4 :(得分:0)

您可以使用Action将更改对象(在您的案例中类型为ObjectStateManager)的状态更改为“未更改”,如下所示:

context.ObjectStateManager.ChangeObjectState(actionObject, EntityState.Unchanged);

我希望这会有所帮助:)

ps:您可以使用以下方法获取已修改对象的列表:

var modifiedActions = context.Actions.Where(a=>a.EntityState!=EntityState.Unchanged);