2013-04-09 18 views
2

我正在使用WCF數據服務客戶端,並嘗試添加一個對象到我的datacontext(EntityFramework)。該對象被添加,但是我不能在之後使用該ID。有沒有可能觸發SaveChanges方法後,對象直接獲取自動生成的ID?如何在AddObject上添加數據時如何返回ID?

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 
} 

我的擴展方法是這樣的:

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方法,但這種計算策略也返回一個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.AddAndUpdateResponsePreference設置爲IncludeContent。這會向服務器發送首選標頭,並且服務器將在響應POST請求時包含實體。客戶端然後解析它並將這些值應用到客戶端對象。由此,一旦SaveChanges完成,新生成的ID應該在客戶端OM中可見。

+0

事實證明我在Savehanges函數中使用了EndSaveChanges函數。感謝您指點我正確的方向。 – 2013-04-10 08:13:52

相關問題