2011-11-30 1 views
2

서버 측에 EF4와 함께 매우 간단한 Silverlight RIA 솔루션을 만들었습니다. DomainService에 Named Update 메서드를 추가했지만 사용할 수 없습니다. 문제는 ChangeSet.GetOriginal()입니다. 그것은 null을 반환 :WCF RIA 서비스 - 명명 된 업데이트를 사용할 때의 오류

public partial class MainPage : UserControl 
    { 
     StudentsDomainContext ctx; 
     Student stud; 

     public MainPage() 
     {    
      InitializeComponent(); 
      ctx = new StudentsDomainContext(); 
     } 

     private void buttonGet_Click(object sender, RoutedEventArgs e) 
     { 
      ctx.Load<Student>(ctx.GetStudentSetQuery()).Completed += new EventHandler(MainPage_Completed); 
     } 

     void MainPage_Completed(object sender, EventArgs e) 
     {      
      var lo = (sender as LoadOperation<Student>); 
      stud = lo.Entities.First();      
     } 

     private void buttonChange_Click(object sender, RoutedEventArgs e) 
     { 
      stud.MyMethod(3, 6);        
      ctx.SubmitChanges();   
     } 
    } 

그것은 내가 자동차를 통해 간단한 업데이트를 사용할 때하는 CRUD의 모든 작품 생성되는 점에 유의하는 것이 중요합니다 :

[EnableClientAccess()] 
    public class StudentsDomainService : LinqToEntitiesDomainService<Model1Container> 
    { 
     [Update(UsingCustomMethod = true)] 
     public void MyMethod(Student stud, int a, int b) 
     { 
      stud.FirstName = (a*b).ToString(); 
      var original = this.ChangeSet.GetOriginal(stud); 
      // original is null; 
      this.ObjectContext.StudentSet.AttachAsModified(stud, original); //Exception is thrown 
     } 
     . 
     . 
     . 
    } 

이이 (가)의 XAML 코드 숨김입니다.

답변

0

귀하의 질문에 대한 간단한 대답은 귀하가 귀하의 실버 라이트 어플리케이션에서 엔티티를 변경하지 않았기 때문에 아무것도 서버로 보내지 않으므로 원본을 몇 가지 더 제안 할 수없는 이유입니다.

1. 먼저, 다음 기능과 같은 Ria 도메인 서비스의 표준 업데이트 기능을 사용하는 것이 좋습니다. 그런 다음 클라이언트 측에서 엔티티 값을 자유롭게 변경할 수 있으며, 경우에 따라 실버 라이트 부분에서 학생의 이름을 변경할 수 있습니다. 그런 다음 변경 사항을 모두 서버에 제출하십시오.

public void UpdateAddress(Address currentAddress) 
     { 
      this.DbContext.Addresses.AttachAsModified(currentAddress, this.ChangeSet.GetOriginal(currentAddress), this.DbContext); 
     } 

2.Update 동작은 최신 버전에서는 더 이상 사용되지 않으며 EntityAction으로 대체되었습니다. 3. 사용자 지정 메서드를 실제로 사용하려면 RoundtripOriginalAttribute를 사용하고이 특성을 사용하여 서버로 다시 보내려는 모든 속성에 주석을 달아 볼 수 있습니다.