我正在更改我的项目以将多个对象发布到我的数据库表。我遇到的问题是,在我更改了Post方法后,我不知道如何使用对象的Id返回创建的路径。我之前没有这样做过,所以我相信在其他所有方面我都是正确的。
public async Task<IHttpActionResult> PostNewPurchaseOrderDetail([FromBody]IEnumerable<PurchaseOrderDetail> newPurchaseOrderDetail)
{
try
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
using (var context = new ApplicationDbContext())
{
context.PurchaseOrderDetails.AddRange(newPurchaseOrderDetail);
await context.SaveChangesAsync();
return CreatedAtRoute("PurchaseOrderDetailApi", new { newPurchaseOrderDetail.PurchaseOrderDetailId }, newPurchaseOrderDetail);
}
}
catch (Exception ex)
{
return this.BadRequest(ex.Message);
}
}
错误消息
错误2&#39; System.Collections.Generic.IEnumerable&#39;不包含&#39; PurchaseOrderDetailId&#39;的定义没有扩展方法&#39; PurchaseOrderDetailId&#39;接受类型为'System.Collections.Generic.IEnumerable&#39;的第一个参数。可以找到(你错过了使用指令或程序集引用吗?)C:\ Development \ TexasExterior \ TexasExterior \ apiControllers \ apiPurchaseOrderDetailController.cs 58 98 TexasExterior
答案 0 :(得分:1)
错误告诉您究竟是什么问题。您变量newPurchaseOrderDetail
是PurchaseOrderDetail
的可枚举,并且您试图直接引用PurchaseOrderDetail
的属性。您需要从列表中获取单个项目才能调用该属性。例如:
return CreatedAtRoute("PurchaseOrderDetailApi", new { newPurchaseOrderDetail.First().PurchaseOrderDetailId }, newPurchaseOrderDetail);
注意.First()
。但是,这只会给你集合中第一个项目的id,这可能不是你想要的。我不确定你的CreatedAtRoute
方法做了什么或它是如何工作的,但你可以改变第二个参数以期望一组id,然后传递类似的东西:
newPurchaseOrderDetail.Select(m => m.PurchaseOrderDetailId)
哪个会给你一个id列表。