2010-03-22 1 views
2

SL4 MVVM RIA 기반 응용 프로그램을 처음 실행하면 다음 상황이 발생했습니다. SL 클라이언트에서 레코드 (EF4, NO-POCOS !!)를 업데이트하는 것처럼 보이지만 dbms의 값은 변경되지 않습니다. 피들러 디버깅 저장의 메시지는 (다른 사람의 사이에)입니다 :RIA 서비스 저장소 저장이 작동하지 않습니까?

EntityActions.nil의 b9http : //schemas.microsoft.com/2003/10/Serialization/Arrays^HasMemberChanges^Id^ OperationUpdate

나는 이것이 단지 다음과 같다고 가정한다. dbms는이 레코드에 대한 업데이트를 수행해야합니다. 맞습니까?

나는이 같은 일반적인 저장소를 사용하고 있습니다 :

[Update] 
     public void UpdateCulture(Culture currentCulture) 
     { 
      if (currentCulture.EntityState == System.Data.EntityState.Detached) 
      { 
       this.cultureRepository.Attach(currentCulture); 
      } 
      this.cultureRepository.Save(); 
     } 

내가 currentCulture - 엔티티가 분리되는 것을 알고

public class Repository<T> : IRepository<T> where T : class 
    { 
     IObjectSet<T> _objectSet; 
     IObjectContext _objectContext; 

     public Repository(IObjectContext objectContext) 
     { 
      this._objectContext = objectContext; 
      _objectSet = objectContext.CreateObjectSet<T>(); 
     } 

     public IQueryable<T> AsQueryable() 
     { 
      return _objectSet; 
     } 
     public IEnumerable<T> GetAll() 
     { 
      return _objectSet.ToList(); 
     } 
     public IEnumerable<T> Find(Expression<Func<T, bool>> where) 
     { 
      return _objectSet.Where(where); 
     } 
     public T Single(Expression<Func<T, bool>> where) 
     { 
      return _objectSet.Single(where); 
     } 
     public T First(Expression<Func<T, bool>> where) 
     { 
      return _objectSet.First(where); 
     } 
     public void Delete(T entity) 
     { 
      _objectSet.DeleteObject(entity); 
     } 
     public void Add(T entity) 
     { 
      _objectSet.AddObject(entity); 
     } 
     public void Attach(T entity) 
     { 
      _objectSet.Attach(entity);  
     } 

     public void Save() 
     {   
      _objectContext.SaveChanges(); 
     } 
    } 

DomainService 업데이트 방법

은 다음과 같다. 무엇이 나를 혼란스럽게합니까 (다른 것들 사이에서도) 이것은 _objectContext가 아직 살아 있습니까? (즉, 레코드에 변경된 사항을 "알 수"있음을 의미하므로 Attach()를 호출하고 Save()로 충분해야합니다!)!

내가 무엇이 누락 되었습니까?

개발 환경 : VS2010RC - 엔티티 프레임 워크 4 (NO 포항 강판) 사전

+0

또한 내 SL 클라이언트에서 일반 저장소를 만들고 싶습니다. 저에게 어떻게 할 수 있는지 보여 주시겠습니까? IObjectContext 인터페이스는 무엇을 의미합니까? 나는 DomainContext가 IObjectContext 등을 구현하지 않는다는 것을 알고 있습니다, 당신은 약간의 학습 자원을 제공 할 수 있습니까? 감사. – Shimmy

답변

1

당신은 맥락에서 문화를 부착되지만,이 객체가 실제로 변경되었음을 상황을 이야기하지 않는에서

감사합니다.

내 컴퓨터에있는 생성 된 코드는 다음과 같습니다

중요한 무엇
public void UpdateDepartment(Department currentDepartment) { 
    if ((currentDepartment.EntityState == EntityState.Detached)) { 
     this.ObjectContext.AttachAsModified(currentDepartment, this.ChangeSet.GetOriginal(currentDepartment)); 
    } 
} 

는 'AttachAsModified'입니다.

0

Timores 올바른 방향, (지금까지 내 문제에 대한 우려로) 용액에 나를 지적은 매우 간단합니다 : 단순히 저장소에이 방법을 추가하고 우리는 완료 :

public void AttachModified(T entity) 
{ 
      _objectSet.Attach(entity); 
      _context.ObjectStateManager.ChangeObjectState(entity, System.Data.EntityState.Modified);    
} 

을 이제 대신 호출하는 Attach()는 AttachModified()를 호출합니다.

티모스에 감사드립니다.