1

在尝试更新实体时,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;
            });

        });

我在这里错过了什么吗?

4

1 回答 1

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'})

您可以尝试修改PATCHUPDATEHTTP 动词

于 2014-01-17T06:45:37.977 回答