我正在使用 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/