基于自定义ID的更新/放置方法?

时间:2016-03-02 13:56:45

标签: asp.net-web-api asp.net-web-api2

以下是使用Entity Framework的Web Api 2项目中PUT方法的标准scafolding代码。

当你拥有产品的ID时,这很有效。

但是,我有一种情况,我希望根据表中的唯一ID来更新/放置产品,但是不同的字段'internalRef'(字符串)与制造ID相结合。 所以,我首先要检查是否有一个产品,其内部参数为“内部参考”=“123”,而制造商ID = 1。如果没有返回NotFound()。如果有,则使用发布的数据更新该产品。

有关如何做到这一点的任何消息?

rails g scaffold_controller Article title:string body:text

1 个答案:

答案 0 :(得分:0)

Put示例只是一个模板,您必须根据您的要求进行修改。在您的情况下,使您的实体与众不同的不是Id,而是internalRef和制造商。因此,您只需替换/调整代码即可使用internalRef + manufacturer的复合唯一ID。

[Route("product/update")]
[ResponseType(typeof(void))]
public async Task<IHttpActionResult> PutProduct(string internalRef, int manufacturer, Product product)
{
    if (!ModelState.IsValid)
    {
        return BadRequest(ModelState);
    }

    if (internalRef != product.InternalRef && manufacturer != product.Manufacturer)
    {
        return BadRequest();
    }

    db.Entry(product).State = EntityState.Modified;

    try
    {
        await db.SaveChangesAsync();
    }
    catch (DbUpdateConcurrencyException)
    {
        if (!ProductExists(internalRef, manufacturer))
        {
            return NotFound();
        }
        else
        {
            throw;
        }
    }

    return StatusCode(HttpStatusCode.NoContent);
}

请务必使用您自己的ProductExists(int id)更改方法ProductExists(string internalRef, int manufacturer)以使其正常工作。