흥미로운 질문입니다! 지금까지 깨달은 것 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
에 객체의 상태,이 방법은 모든 속성은 Modified
로 To
재산 마지막으로
modifiedProps.ForEach(p=> entry.SetModifiedProperty(p));
을 통해 변경 사항을 저장 제외 Update
의 SET
절
var entry = context.ObjectStateManager.GetObjectStateEntry(message);
entry.ChangeState(EntityState.Unchanged);
3 마크 이전에 수정 된 속성에서 제외됩니다 context.SaveChanges();
편집 :
1 단계에서 To
속성을 제외하는 것을 잊었습니다. 지금 바로 unmodifed로 전체 개체 설정 속성을
_db.ObjectStateManager.ChangeObjectState(message, EntityState.Unchanged);
해독 후
특히 암호화가 관련되어있는 경우에는이 작업을 수행하지 않겠습니다. 해독 된 메시지가있는 뷰 모델 또는 DTO 클래스를 만듭니다. 그렇지 않으면 해독 된 메시지가 저장되는 위험을 항상 감수해야합니다. –
항상? 실제로, 나는 그것을 방지하기 위해 약간의 작업이 필요하다는 것을 인정하지만. 내 솔루션을 참조하십시오. – Alireza
@Gert Arnold - 정확히 말해, 해독 된 메시지가 데이터베이스에 다시 저장되는 문제가 있습니다. 그것이 수정되지 않은 채로 설정하려는 이유입니다. – Patel