如何在OData中使用带有多个主键的Delta进行修补

时间:2015-07-24 14:11:25

标签: asp.net-mvc asp.net-web-api odata patch delta

我正在尝试使用补丁来更新OData中的记录,但该表包含多个主键,因此它会给出错误 "传递的主键值的数量必须与实体上定义的主键值的数量相匹配。 ASP.NET MVC实体框架"

以下是示例代码。

    public async Task<IHttpActionResult> Patch(Delta<PreferenceFormat> patch)
    {

        Validate(patch.GetEntity());

        if (!ModelState.IsValid)
        {
            return BadRequest(ModelState);
        }

        PreferenceFormat PreferenceFormat = await db.PreferenceFormats.FindAsync(_userId);

        if (PreferenceFormat == null)
        {
            return NotFound();
        }

        patch.Patch(PreferenceFormat);

        try
        {
            await db.SaveChangesAsync();
        }
        catch (DbUpdateConcurrencyException)
        {
            if (!PreferenceFormatExists(_userId))
            {
                return NotFound();
            }
            else
            {
                throw;
            }
        }

        return Updated(PreferenceFormat);
    }

我需要在这里传递4个主键参数:

PreferenceFormat PreferenceFormat = await PreferenceFormats.FindAsync(_userId);

我怎样才能达到同样目的。

1 个答案:

答案 0 :(得分:0)

我可能迟到了,但FindAsync有以下定义

public virtual Task<object> FindAsync(params object[] keyValues)

因此,您可以使用多个键。

来自MSDN:复合键值的排序在EDM中定义,EDM又在设计器中定义,Code First fluent API或DataMember属性。