通过iCollection模型在WebAPI中添加记录?

问题描述:

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

所以,我有一个产品的模型。此模型具有对模型颜色的参考(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)的想法?

+0

dbProduct.Colors的类型是什么?当然,这应该只是您的API类型和EF类型之间的映射练习?而你的颜色参数看起来应该是一个数组/集合。即颜色[]颜色... – strickt01

+0

dbProduct.Colors是一个iCollection 。这是模型中的定义:public virtual ICollection Colors {get;组; } JSON只是一个简单的例子。我比“颜色”拥有更多的价值。 – brother

+0

这是VS显示的错误:无法将源类型'Models.Color'转换为目标类型'System.Collections.Generic.ICollection brother

您正试图将一个项目(Models.Color)分配给一个集合(ICollection<Models.Color>)。因此,您需要将API更改为接受Models.Color的集合:

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

这给了我以下错误:无法将类型IEnumerable <..>转换为ICollection <...> ? – brother

+0

糟糕,应该是ICollection 。相应地修改了答案。 – strickt01

+0

但是当然。谢谢! – brother