2013-03-17 2 views
0

내가 찾은 모든 기사는 RIA를 사용하여 새 항목을 추가하는 방법을 보여줍니다. 아무도 기존 데이터를 업데이트하지 않습니까? 확실히 doesnt는 그것을 좋아하는 것처럼 보인다.MVVM Ria Services. 기존 엔티티 업데이트

시나리오 :

내가 내 법인에서 끌어 내 VM에서 서비스를 사용하고 있습니다. 엔티티는 내보기에서 VM을 사용하여 편집됩니다. 그런 다음 엔터티를 다시 데이터베이스에 저장하려고합니다. 나는 그것을 더하고 싶지 않다. 나는 그것을 삭제하고 싶지 않다. 나는 그것을 업데이트하고 싶다. 나는 서버 측에서 그 방법을 보았지만, 모두 내가 가진 datacontext에 변경 사항을 제출하고있다.

나는

public void SaveDoctors(Doctors current, Doctors original, Action<SubmitOperation> callback) 
     { 
      var ctx = new RefereeDomainContext(); 

      ctx.Doctors.Attach(original); 
      original = current; 
      ctx.SubmitChanges(callback,null); 


     } 

이 중 하나가 작동하지 않습니다 다음, 원래의 개체를 복제 할 원본 개체를 연결하고 그 위에 현재의 엔티티를 복사하는 것을 시도했다. 저는 오늘 블로그 10 개를 읽었습니다. 발견 한 항목은 항상 엔티티를 업데이트하는 방법을 보여줄 것이라고 주장하는 경우에도 새로운 엔티티를 추가하는 것입니다.

엔터티를 서버 측으로 쉽게 보내고 거기에서 처리 할 수는 있지만 올바른 형식인지는 알 수 없습니다.

엔티티를 업데이트하기위한 적절한 위치는 어디입니까? SL5를 사용 중입니다. 사용중인 RIA 서비스의 버전을 알려주는 방법을 모르겠습니다.

대한 설명

내가 내 뷰 모델에서 서비스 호출을 사용하여 내 개체 검색 :

DoctorsVM=new DoctorsVM(doctors); 

이가 원하는 분야

Doctors doctors = GetService<IDoctors>.GetDoctor().FirstorDefault(d=>d.id=xxxx); 

내가 내 VM 구조로 의사 엔티티를 밀어을 뷰 모델의 속성을 통해 편집 된 의사를 참조하십시오. 모든 하위 항목은 하위 개체의 ObservableCollections로 채워집니다. 나는이 특정 법인으로 수행하고 내가 저장 준비가

:

GetService.UpdateCurrentDoctor (DoctorsVM.Doctor는) // 원래 개체를 참조합니다.

이것은 내가 잃어 버리는 곳입니다. 내가 이렇게하면 내 방법 내부는

var ctx=new DataContext; 
ctx.Attach(currentDoctor);//attaches as unmodified 

ctx.Add(currentDoctor);//creates a new Entity. Dont want that. 

ctx.AttachAsModified는 서버 측에서만 사용할 수 있습니다 작동 나던. ctx.UpdateDoctors는 서버 측에서만 사용할 수 있습니다.

여기가 내가 길을 잃은 곳입니다.

저는 WPF/바탕 화면 배경에서 왔기 때문에 전체 비동기 풍경이 손실되었을 수도 있습니다. 그리고 나는 올바른 방향으로 밀어 넣기 만하면됩니다.

답변

0

한 세션 동안 데이터 인터페이스를 활성 상태로 유지해야합니다. 나는 이것을 좋아하지 않지만 그것이 무엇인지 알 수있다. 응용 프로그램에서 다음 검색에서 domaincontext를 재설정하여 너무 커지지 않도록합니다.

0

조금 오래에 대한 질문, 대답은 그렇게 할 수있는 조금 긴 : 당신이 정말로 필요하면

당신은 개체를 복제해서는 안됩니다!

BackGround 엔터티 모델에는 각 엔터티에 대한 키가 있습니다.도메인 서비스를 검사하면이 키 속성으로 수행 된 모든 CRUD 작업이 표시됩니다. 서버 측에서 두 개의 엔티티가 동일한 키를 반환하면 클라이언트 측에서 그 중 하나가 표시됩니다.

응답 쉽게 레코드를 업데이트 할 수 있습니다. DomainService 클래스 인스턴스를 사용하여 엔티티를 가져 와서 수정하려는 항목을 가져온 다음 제출하십시오. 그게 전부입니다.

 //a line of unsafe-dummy code 
     domService.GetDoctorByID("124..").FirstOrDefault().CitizenNumber='CN123'; 

     //domService class track changeset so it decide update 
     domService.SubmitChanges();  
     //Update occurs by entity key i.e. DoctorID 

내가 볼 "의사"표현 우리는 또한 실버 & RIA 서비스를 사용하여 의료 응용 프로그램을 개발. 행운을 빕니다!

+0

그러나 문제는 정보를 가져 오는 즉시 정보를 수정하지 않는다는 것입니다. 정보를 가져 와서 클라이언트로 반환하면 정보가 분리됩니다. 클라이언트에서 조작 한 다음 다시 첨부하십시오. 도메인 서비스. 그러나 클라이언트 측의 연결은 수정되지 않은 상태로 부착됩니다. – ecathell

+0

당신의 질문 제목에서 "MVVM Ria Services. 기존 엔티티 업데이트"나는 그것을 이해하지 못했습니다. 필드를 변경하지 않았지만 서버에서 변경된 것 같습니다. ChangeSet 변수를 추적 했습니까? 이 항목 옆에있는 항목을 변경하지 않으면 Submit 대신 Reject를 호출 할 수 있습니다. –

+0

병을 분명히하기 위해 내 질문을 편집하십시오. 그러나 그렇습니다, 나는 실체를 바꾸고 있습니다. 그러나 더 이상 datacontext에 연결되어 있지 않을 때 엔 그것을 변경하고 있습니다. 왜냐하면 그것을 얻는 데 사용되는 뷰 모델로 엔티티를 검색하는 서비스에서 벗어 났기 때문입니다. – ecathell