2010-07-13 5 views
2

Visual Studio 2008에서 엔티티 프레임 워크를 사용합니다. SP1이 .NET Framework와 VS 자체인지 확인해야합니다. 내 응용 프로그램은 n 계층 환경에서 개발됩니다. 첫 번째 단계 데이터를 컨텍스트에서 컬렉션으로 변환하고 사용자에게 직렬화합니다.Entity Framework SaveChanges()가 작동하지 않습니까?

HRMSDBContext context = new HRMSDBContext(); 

List<InHouseTrainingHead> heads = context.InHouseTrainingHead.ToList<InHouseTrainingHead>(); 

foreach (InHouseTrainingHead head in heads) 
{ 
    context.Detach(head); 
} 

return heads; 

사용자가 일부 데이터를 변경하고 저장을 클릭하면이 목록은 저장 방법으로 돌아갑니다.

HRMSDBContext context = new HRMSDBContext(); 

foreach (InHouseTrainingHead head in lists) 
{ 
    context.Attach(head); 
    context.ApplyPropertyChanges(head.EntityKey.EntitySetName, head); 
} 

context.SaveChanges(); 

불행히도 SaveChanges() 이후에는 아무 것도 발생하지 않습니다. 이 문제를 어떻게 해결할 수 있습니까? 당신은 ObjectContext.ApplyPropertyChanges 방법을 사용하지 않는

감사

답변

2

은 그것을 사용하기위한 것입니다. 엔티티의 두 인스턴스 (컨텍스트에 연결된 수정되지 않은 인스턴스와 분리 된 수정 된 인스턴스)가 필요합니다. 변경 사항은 수정되지 않은 첨부 된 엔티티에 적용되고 수정되며 변경 사항을 저장할 수 있습니다. 따라서 수정 된 엔티티를 첨부하지 말고 ObjectContext.ApplyPropertyChanges을 호출하기 전에 데이터베이스에서 엔티티를로드해야합니다.

4

Daniel Brückner의 답변을 확장하려면 - 샘플에서 일어나는 일은 head 개체와 그 자체 사이에 ApplyPropertyChanges을 시도하는 것입니다. 분명히 변화가 없으므로 아무 것도 저장되지 않습니다. 그러나 DB에서 레코드를 가져 오지 않으려는 경우 새로 첨부 된 엔터티의 EntityState을 수동으로 Modified으로 설정할 수 있습니다. 이 경우 DB에 저장됩니다 :

HRMSDBContext context = new HRMSDBContext(); 

foreach (InHouseTrainingHead head in lists) 
{ 
    context.Attach(head); 
    ObjectStateEntry addedEntity = context.ObjectStateManager.GetEntry(head); 
    addedEntity.ChangeState(EntityState.Modified); 
} 

context.SaveChanges(); 
관련 문제