2016-03-03 2 views
0

В контроллере POAP WebAPI, с EntityFramework, я хочу добавить некоторые новые записи на основе ICollection.Добавить записи в WebAPI через iCollection Model?

Итак, у меня есть модель продуктов. Эта модель имеет ссылку (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

ответ

0

Вы пытаетесь назначить один элемент (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