Let's say I have the following domain model
:
public class ProductApplication
{
[Key]
public int Id { get; set; }
[Required(ErrorMessage = "Please enter a title.")]
public string Title { get; set; }
[Required(ErrorMessage = "Please enter a description.")]
public string Description { get; set; }
private ICollection<Product> _products;
public virtual ICollection<Product> Products
{
get { return _products ?? (_products = new Collection<Product>()); }
set { _products = value; }
}
}
In the view, the user creates a new ProductApplication
entity complete with a title, description, and a (one-to-many) collection of related products.
Since each product in the collection already exists in the database, I am currently attempting to post the entity to the server using an array of product ids:
{
"Title": "Foo",
"Description": "Bar",
"Products": [1,2,3] //<-- Product Ids
}
Unfortunately, this fails because the server-side controller is expecting an array of product
objects; not an array of int
.
Short of creating custom business logic, is there a "native" way of accomplishing my desired approach in .NET?
I would create a separate property to get what you want
[NotMapped]
public ICollection<int> ProductIds {
get {
return Products.Select(p => p.ProductId)
.ToList();
}
Or if you really want it to be an array....
[NotMapped]
public int[] ProductIds {
get {
return Products.Select(p => p.ProductId)
.ToArray();
}