2011-03-18 28 views
0

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

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

+0

你说你只想保存'User'实体,但是对附加的'Action'实体有任何改变吗?如果没有,你不应该担心没有任何东西会被保存。你可以发表一些关于如何修改这些实体的代码吗? – 2011-03-18 23:25:17

+0

我更改了两个实体,但我只想保存用户。 – buda 2011-03-18 23:41:23

回答

1

我你改变了一个行动,你不想修改它,你可以根据上下文或将其取下它保持不变(就像破解)。

拆实体:

context.Detach(action); 

设置状态不变:

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

请注意,如果您还操作和用户之间的变化关系,你还需要通过调用reaset的关系状态ObjectStateManager.ChangeRelationshipState

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

+0

好的,谢谢我通过克隆解决了这个问题。你说得对,当你说这个解决方案不应该发生时,我做错了什么,但克隆有帮助。 – buda 2011-03-19 11:05:39

0

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

+0

我可以以某种方式改变一些对象的状态不变吗? – buda 2011-03-18 23:24:13

+0

我不这么认为。 – Femaref 2011-03-18 23:26:53

0

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

0

我通过创建实体副本来解决这个问题,包括所有孩子的操作(深层复制),以及当我更改它们时,我在副本上工作。

0

你可以(在你的情况Action型),以“不变”使用ObjectStateManager像这样改变改变对象的状态:

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

我希望这有助于:)

PS:您可以使用此得到修改的对象列表:

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