2013-09-28 2 views
0

EntityObject의 특정 속성에서 IsModified를 false로 설정할 수 있습니까?EF 4.0 엔티티의 일부 열에서 IsModified를 false로 설정합니다.

여기

message.To = message.To.Decrypt(encryptionKey); 

지금 내가 변경 사항을 저장하는 동안, EF는이 칼럼에 대한 변경 사항을 무시하도록, 거짓 IsModified =으로 message.To을 설정할 내 코드입니다.

EF 4.0을 사용 중입니다.

+3

특히 암호화가 관련되어있는 경우에는이 작업을 수행하지 않겠습니다. 해독 된 메시지가있는 뷰 모델 또는 DTO 클래스를 만듭니다. 그렇지 않으면 해독 된 메시지가 저장되는 위험을 항상 감수해야합니다. –

+0

항상? 실제로, 나는 그것을 방지하기 위해 약간의 작업이 필요하다는 것을 인정하지만. 내 솔루션을 참조하십시오. – Alireza

+0

@Gert Arnold - 정확히 말해, 해독 된 메시지가 데이터베이스에 다시 저장되는 문제가 있습니다. 그것이 수정되지 않은 채로 설정하려는 이유입니다. – Patel

답변

1

흥미로운 질문입니다! 지금까지 깨달은 것 EF 4.0에는 이와 같은 간단한 해결책이 없습니다 (다행스럽게도 이후 버전의 EF는 좋은 방법으로이를 해결했습니다).

어쨌든, 3 단계로이 문제를 해결할 수 있습니다 : 이미 첨부 파일의 시간 상황에와 있기 때문에 부착

1message 경우는, 우리가 처음에 그 수정 된 속성을 기록 수정되었습니다 가 장착되지 않은 경우 목록, 우리는

context.Attach(message); // the sate of the message will be UnChanged 
var modifiedList = any property changed based on what you have done so far; 

2 변경을 첨부

var modifiedProps = context.ObjectStateManager.GetObjectStateEntry(message).GetModifiedProperties().Where(p=>p.Equals('To')==false).ToList(); 

UnChanged에 객체의 상태,이 방법은 모든 속성은 ModifiedTo 재산 마지막으로

modifiedProps.ForEach(p=> entry.SetModifiedProperty(p)); 

을 통해 변경 사항을 저장 제외 UpdateSET

var entry = context.ObjectStateManager.GetObjectStateEntry(message); 
entry.ChangeState(EntityState.Unchanged); 

3 마크 이전에 수정 된 속성에서 제외됩니다 context.SaveChanges();

편집 :

1 단계에서 To 속성을 제외하는 것을 잊었습니다. 지금 바로 unmodifed로 전체 개체 설정 속성을

_db.ObjectStateManager.ChangeObjectState(message, EntityState.Unchanged); 

해독 후

+0

하지만 SetModifiedProperty가 속성을 변경된 것으로 표시하는 동안 변경하지 않기를 원합니다. – Patel

+0

@Patel 코드가 실제로 # 2 단계에서 수행하는 것입니다. 2 단계에서 엔티티의 상태가 UnChanged로 변경되면 ** 모든 속성 **이 'UnChanged'로 표시됩니다. 3 단계에서 일부는 'To'를 제외하고 'Changed'로 다시 표시됩니다. – Alireza

+0

Oppsss .... 문제가 있습니다. 엔터티 상태가 UnChanged로 변경되면 수정 된 모든 속성에 대한 이전 값이 복원됩니다. 이는 내가 원하는 것이 아닙니다. – Patel

0

다음은

은 아래 라인을 쓴 나를 위해 일을했다 수정됩니다. 이것은 내가 요구 한 것이 아니지만 EF 4.0은 Property를 Unchanged로 직접 설정할 수있는 기능을 제공하지 않습니다.

관련 문제