以下是使用Entity Framework的Web Api 2项目中PUT方法的标准scafolding代码。
当你拥有产品的ID时,这很有效。
但是,我有一种情况,我希望根据表中的唯一ID来更新/放置产品,但是不同的字段'internalRef'(字符串)与制造ID相结合。 所以,我首先要检查是否有一个产品,其内部参数为“内部参考”=“123”,而制造商ID = 1。如果没有返回NotFound()。如果有,则使用发布的数据更新该产品。
有关如何做到这一点的任何消息?
rails g scaffold_controller Article title:string body:text
答案 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)
以使其正常工作。