C# 从保存更改中排除实体
有人能告诉我如何在保存更改之前从上下文中排除某些实体吗C# 从保存更改中排除实体,c#,.net,entity-framework,C#,.net,Entity Framework,有人能告诉我如何在保存更改之前从上下文中排除某些实体吗 例如,我有两个实体操作和用户,我只想保存用户?这是不可能的,因为SaveChanges方法在上下文级别工作,而不是实体级别。最好的选择是不修改实体,除非你真的想更改它们。但是,您可以更改它们的状态。《编程实体框架》(Programming Entity Framework)一书对此有详细说明。我通过使用所有子对象创建实体操作的副本(深度副本)来解决这个问题,当我更改它们时,我处理副本。您可以将更改对象的状态(在您的情况下,类型为操作)更改为
例如,我有两个实体操作和用户,我只想保存用户?这是不可能的,因为
SaveChanges
方法在上下文级别工作,而不是实体级别。最好的选择是不修改实体,除非你真的想更改它们。但是,您可以更改它们的状态。《编程实体框架》(Programming Entity Framework)一书对此有详细说明。我通过使用所有子对象创建实体操作的副本(深度副本)来解决这个问题,当我更改它们时,我处理副本。您可以将更改对象的状态(在您的情况下,类型为操作
)更改为“未更改”像这样使用ObjectStateManager
:
context.ObjectStateManager.ChangeObjectState(actionObject, EntityState.Unchanged);
我希望这有帮助:)
ps:您可以使用以下方法获得修改对象的列表:
var modifiedActions = context.Actions.Where(a=>a.EntityState!=EntityState.Unchanged);
如果您更改了一个操作,并且不想修改它,那么您可以将其与上下文分离,或者将其设置为未更改(这类似于hack) 分离实体:
context.Detach(action);
将状态设置为未更改:
context.ObjectStateManager.ChangeObjectState(action, EntityState.Unchanged);
请注意,如果还更改了操作和用户之间的关系,则还需要通过调用ObjectStateManager.ChangeRelationshipState
重新设置关系状态
无论如何,你做错了什么,因为这种情况不应该发生。应始终仅修改要保存的实体。如果出于任何原因,您只需要修改其中的一部分,那么使用克隆实体并在其他上下文中修改它们的方法是正确的。语境是工作的单位。您应该只修改属于同一业务事务一部分的实体。我是否可以以某种方式将某个对象的状态更改为未更改?您说您只想保存
用户
实体,但附加的操作
实体是否有任何更改?如果没有,你就不必担心,因为什么都救不了。你可以发布一些关于如何修改这些实体的代码吗?我更改了两个实体,但我只想保存用户。好的,谢谢,我通过克隆解决了这个问题。你说得对,当你说这个解决方案不应该发生的时候,我做错了什么,但是克隆有帮助。