2013-04-09 1 views
2

WCF Data Service 클라이언트를 사용하고 datacontext (EntityFramework)에 개체를 추가하려고합니다. 개체가 추가되었지만 나중에 ID를 사용할 수 없습니다. SaveChanges 메서드를 트리거 한 후에 개체가 자동으로 생성 된 ID를 직접 가져올 가능성이 있습니까?AddObject에 데이터를 추가하면 ID를 반환하는 방법은 무엇입니까?

public partial class MyEntities 
{ 
    public async Task<bool> SaveChanges() 
    { 
    var queryTask = Task.Factory.FromAsync(this.BeginSaveChanges(null,null), asResult => 
    { 
     return(asResult.IsCompleted); 
    }); 
    return await queryTask; 
    } 
} 
나는 AddObject 방법을 확장하는 것이 시도

하지만,이 approch은 0 값 반환 :

Order order=new Order(); 
order.name="test"; 
context.AddObject("Order", order); 
if (await context.SaveChanges()) //Extension method on my context to save changes async 
{ 
    System.Diagnostics.Debug.WriteLine(order.id); //output: 0 
} 

내 확장 방법은 다음과 같습니다 당신이 사용할 수있는 경우

internal async void AddObject<TResult>(object entity) where TResult : IExtend 
    { 
     base.AddObject(entity.ToString().Split('.').Last(), entity); 
     if (await this.SaveChanges()) 
     { 
      System.Diagnostics.Debug.WriteLine(((TResult)entity).id); //output: 0 
     } 
    } 

답변

0

나는 EndSaveChanges 기능을 놓쳤습니다. 내 확장 된 함수를 이렇게 변경하면 개체 ID가 업데이트됩니다.

public async Task<DataServiceResponse> SaveChanges() 
    { 
     var queryTask = Task.Factory.FromAsync(this.BeginSaveChanges(null,null), asResult => 
     { 
      var result = this.EndSaveChanges(asResult); 
      return result; 
     }); 
     return await queryTask; 
    } 
3

을 OData V3 다음에 DataServiceContext.AddAndUpdateResponsePreferenceIncludeContent으로 설정할 수 있습니다. 그러면 서버에 prefer 헤더가 보내지고 서버는 POST 요청에 대한 응답으로 엔티티를 포함합니다. 그런 다음 클라이언트는이를 파싱하고 값을 클라이언트 측 객체에 적용합니다. SaveChanges이 완료되면 새로 생성 된 ID가 클라이언트 측 OM에 표시되어야합니다.

+0

내가 Savehanges 기능에 EndSaveChanges 기능을 miesed 것으로 나타났다. 나를 올바른 방향으로 향하게 해주셔서 감사합니다. –