Ho una configurazione di relazione genitore-figlio che è abbastanza di base. Il risultato finale è che voglio essere in grado di restituire le tabelle risultanti come JSON tramite ASP.NET MVC WebAPI. Sto usando Entity Framework 5.0 beta 2.
Posso dimostrare l'errore che sto incontrando con un semplice esempio. Date le classi Category
e Product
con il contesto dati corrispondente:
public class Category
{
public int CategoryId { get; set; }
public string Title { get; set; }
public virtual IEnumerable<Product> Products { get; set; }
}
public class Product
{
public int ProductId { get; set; }
public string Title { get; set; }
public virtual Category Category { get; set; }
public virtual int CategoryId { get; set; }
}
public class ProductDataContext : DbContext
{
public DbSet<Category> Categories { get; set; }
public DbSet<Product> Products { get; set; }
}
Quando provo a eseguire una query che include i prodotti, ottengo il seguente errore:
A specified Include path is not valid. The EntityType 'FooAndBar.Category'
does not declare a navigation property with the name 'Products'.
La dichiarazione da recuperare è piuttosto semplice:
var everything = dc.Categories
.Include(c => c.Products);
Qual è il modo corretto di impostare le colonne e / o la query in modo che i Products
siano inclusi nelle Categories
?
Le proprietà della raccolta figlio devono essere dichiarate come ICollection<T>
, non come IEnumerable<T>
.
Inoltre, non c'è bisogno di aggiungere in modo esplicito un CategoryId
campo alla classe figlia; EF lo creerà automaticamente nel database.