Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从保存更改中排除实体_C#_.net_Entity Framework - Fatal编程技术网

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
重新设置关系状态


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

我是否可以以某种方式将某个对象的状态更改为未更改?您说您只想保存
用户
实体,但附加的
操作
实体是否有任何更改?如果没有,你就不必担心,因为什么都救不了。你可以发布一些关于如何修改这些实体的代码吗?我更改了两个实体,但我只想保存用户。好的,谢谢,我通过克隆解决了这个问题。你说得对,当你说这个解决方案不应该发生的时候,我做错了什么,但是克隆有帮助。