JayData在实体更新期间使用WebApi v2 Odata的不正确行为调用Patch端点

时间:2014-01-16 20:27:49

标签: asp.net-web-api odata jaydata asp.net-web-api-odata

在尝试更新实体时,JayData触发WepAPI后端的PatchEntity方法。我发现这是一个无效的行为,因为应该调用UpdateEntity。

添加和删除实体功能正常。在后端,我有一个继承自EntitySetController<>

的控制器
public class BaseODataController<TService, TEntity, TEntityDto, TIdentityType> : EntitySetController<TEntityDto, TIdentityType>
{
  //.....

        protected override TEntityDto UpdateEntity(TIdentityType key, TEntityDto update)
        {
            // is not getting called
            _service.Update(update);
            return base.UpdateEntity(key, update);
        }

        protected override TEntityDto PatchEntity(TIdentityType key, Delta<TEntityDto> patch)
        {
            // gets called
            return base.PatchEntity(key, patch);
        }


  //.....
}

以下是在客户端调用的代码:

 vm.updateRole = function(r) {
        return $data.initService('/odata/$metadata').then(function (context) {
            r.Name = "NewUpdateRole";
            context.Role.update(r);
            r.entityState = $data.EntityState.Modified;
            context.saveChanges().then(function(result) {
                debugger;
            });

        });

我在这里错过了什么吗?

1 个答案:

答案 0 :(得分:1)

JayData根据odata提供程序配置的dataServiceVersion属性发送MERGE或PATCH请求。

$data.initService('/odata/$metadata', {dataServiceVersion: '3.0'})

2.0导致MERGE和3.0导致PATCH请求与 WCF数据服务OData 实现保持一致。

如果此行为不符合 WebAPI OData 要求,则会有第二个自定义选项来确定请求的类型:

$data.initService('/odata/$metadata', {UpdateMethod: 'PATCH'})

您可以尝试修改PATCHUPDATE HTTP动词