【问题标题】:Add records in WebAPI via iCollection Model?通过 iCollection 模型在 WebAPI 中添加记录?
【发布时间】:2016-03-03 20:59:49
【问题描述】:

在使用 EntityFramework 的 WebAPI POST 控制器中,我想添加一些基于 ICollection 的新记录。

所以,我有一个产品模型。该模型具有对模型颜色的引用 (ICollection)。 我有一个 POST 控制器,它应该能够添加一种或多种颜色,绑定到产品。

我有以下代码:

public async Task<IHttpActionResult> PostProduct(string InternalReferenceId, int SupplierId, Colors colors)
        {
            Product dbProduct = db.Products.FirstOrDefault(s => s.InternalReferenceId == InternalReferenceId && s.SupplierId == SupplierId);

            if (dbProduct != null)
            {
        // iCollection
                dbProduct.Colors = colors;
                await db.SaveChangesAsync();
            }
            else
            {
                return NotFound();
            }

            return Ok();
}

JSON 可能如下所示;

{
    "color": "white"
},
{
    "color": "black"
},
{
    "color": "green"
}

关于我如何将dbProduct.Colors 分配给颜色的内容/模型(即 JSON)的任何想法?

【问题讨论】:

  • dbProduct.Colors 的类型是什么?当然,这应该只是您的 API 类型和 EF 类型之间的映射练习?而且您的颜色参数看起来应该是一个数组/集合。即 Color[] 颜色...
  • dbProduct.Colors 是一个 iCollection。这是模型中的定义: public virtual ICollection Colors { get;放; JSON 只是一个简单的例子。我拥有的价值不仅仅是“颜色”。
  • 这是VS显示的错误:Cannot convert source type 'Models.Color' to target type 'System.Collections.Generic.ICollection

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


【解决方案1】:

您正在尝试将单个项目 (Models.Color) 分配给集合 (ICollection&lt;Models.Color&gt;)。因此,您需要更改您的 API 以接受 Models.Color 的集合:

public async Task<IHttpActionResult> PostProduct(string InternalReferenceId, int SupplierId, ICollection<Color> colors)

【讨论】:

  • 这给了我以下错误:无法将类型 IEnumerable<..> 转换为 ICollection<...> ?
  • 糟糕,应该是 ICollection。已相应修改答案。
猜你喜欢
  • 2022-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-26
  • 2017-12-12
  • 1970-01-01
相关资源
最近更新 更多