2

WCF Data Service クライアントを使用しており、データ コンテキスト (EntityFramework) にオブジェクトを追加しようとしています。オブジェクトが追加されましたが、後で ID を使用できません。SaveChanges メソッドをトリガーした後、オブジェクトが自動生成された 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
        }
    }
4

2 に答える 2

4

OData V3 を使用できる場合は、 を に設定できDataServiceContext.AddAndUpdateResponsePreferenceますIncludeContent。サーバーに優先ヘッダーが送信され、サーバーは POST 要求への応答にエンティティを含めます。クライアントはそれを解析し、値をクライアント側のオブジェクトに適用します。SaveChangesこれにより、新しく生成された ID は、終了後にクライアント側の OM に表示されるはずです。

于 2013-04-09T19:05:44.243 に答える
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;
    }
于 2013-04-10T08:15:27.713 に答える