2011-03-18 3 views
0

변경 사항을 저장하기 전에 컨텍스트에서 일부 엔티티를 제외하는 방법을 알려줄 수 있습니까?SaveChanges에서 엔티티 제외

예를 들어 2 개의 엔티티 작업 및 사용자가 있으며 사용자 만 저장 하시겠습니까?

+0

'User' 엔티티 만 저장하고 첨부 된 'Action' 엔티티는 변경 했습니까? 그렇지 않으면 걱정할 필요가 없습니다. 아무 것도 구원을 얻지 못할 것입니다. 이 엔티티를 수정하는 방법에 대한 몇 가지 코드를 게시 할 수 있습니까? –

+0

두 항목을 모두 변경했지만 사용자 만 저장하려고합니다. – buda

답변

1

조치를 변경 했으므로 수정하지 않으려는 경우 컨텍스트에서 분리하거나 세트에서 수정할 수 있습니다 그것은 변하지 않은 것처럼 (즉, 해킹과 같다).

분리 엔티티 :

context.Detach(action); 

설정 상태 변경에 :

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

당신은 또한 액션과 사용자 사이의 관계를 변경 한 경우 당신은 또한 호출하여 관계의 상태를 reaset해야한다는 점에 유의 ObjectStateManager.ChangeRelationshipState.

어쨌든 이런 상황이 발생해서는 안되는 문제가 발생했습니다. 저장하려는 엔티티 만 수정해야합니다. 어떤 이유로 든 일부만 수정할 필요가있는 경우 엔 clonning 엔티티에 대한 접근 방식을 수정하고 다른 상황에서 수정하십시오. 컨텍스트는 작업 단위입니다. 동일한 비즈니스 트랜잭션의 일부인 엔티티 만 수정해야합니다.

+0

좋아, 고마워, 복제로 해결 했어. 당신은이 해결책이 일어나지 말아야한다고 말했을 때, 나는 잘못된 것을하고 있었지만 복제가 도움이되었습니다. – buda

0

SaveChanges 방법은 엔티티 수준이 아닌 컨텍스트 수준에서 작동하므로 불가능합니다.

+0

어떻게 든 개체의 상태를 변경하지 않고 변경할 수 있습니까? – buda

+0

나는 그렇게 생각하지 않는다. – Femaref

0

실제로 가장 좋은 옵션은 실제로 엔티티를 변경하지 않는 한 엔티티를 수정하지 않는 것입니다. 그러나 당신은 그들의 상태를 바꿀 수 있습니다. Programming Entity Framework에는 이에 대한 자세한 내용이 있습니다.

0

엔티티의 사본을 작성하여 해결합니다. 모든 어린이 (딥 복사)의 액션을 수행하고 사본을 변경했을 때 사본을 작성했습니다.

0

당신은 "변경되지 않은"는 ObjectStateManager 같은 사용하기 (귀하의 경우 유형 Action의) 변경된 오브젝트의 상태를 변경할 수 있습니다

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

나는이 도움이 :)

PS 희망 :

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