wcf - 如果我在AddObject上添加数据,如何返回ID?

标签 wcf entity-framework wcf-data-services odata

我正在使用 WCF 数据服务客户端并尝试将对象添加到我的数据上下文 (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
        }
    }

最佳答案

如果您可以使用 OData V3,则可以将 DataServiceContext.AddAndUpdateResponsePreference 设置为 IncludeContent。这会将首选 header 发送到服务器,并且服务器将在对 POST 请求的响应中包含该实体。然后,客户端解析它并将这些值应用到客户端对象。这样,一旦 SaveChanges 完成,新生成的 ID 应在客户端 OM 中可见。

关于wcf - 如果我在AddObject上添加数据,如何返回ID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15906397/

相关文章:

asp.net-mvc - 将本地列表操作与 linq to entities 数据库操作混合

c# - 如何制定 GroupJoin() 声明

wcf-data-services - 为什么我的 WCF DataService 没有加载扩展属性?

WCF REST 与 ADO.NET 数据服务

Asp.Net : Best way to broadcast data from WCF service to Asp. 网络客户端

c# - 现有连接被 WCF 中的远程主机强行关闭

c# - 如何将具有许多功能的大型 WCF 服务导入到 VS 2010 中?

.net - RESTful Web 服务中的连接被对等方 (502) 重置

c# - 如何处理修改后的实体记录

WCF/WCF 数据服务/WCF RIA 服务