Entity Framework 6. Get include property throws error does not declare a navigation property I have to entities:
class Product
{
public virtual int? vatrateID { get; set; }
public virtual VatRate VatRate { get; set; }
}
class RowDocumentSale
{
public virtual int? vatrateID { get; set; }
public virtual VatRate VatRate { get; set; }
}
In context I do:
public DbSet<Product> Products { get; set; }
public DbSet<RowDocumentSale> rowDocSale { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<RowDocumentSale>().HasOptional(o => o.VatRate).WithMany().HasForeignKey(k => k.vatrateID);
modelBuilder.Entity<RowDocumentSale>().Map(m =>
{
m.MapInheritedProperties();
m.ToTable("RowDocumentSales");
})
.HasKey(k => k.id).Property(k => k.id)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
modelBuilder.Entity<Product>().HasOptional(o => o.VatRate).WithMany().HasForeignKey(k => k.vatrateID);
modelBuilder.Entity<Product>()
.HasKey(k => k.productID)
.Map(m =>
{
m.MapInheritedProperties();
m.ToTable("products");
})
.Property(k => k.productID)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
}
In DataBase result is:
table RowDocumentSales
"vatrateID" integer,
CONSTRAINT "FK_dbo.RowDocumentSales_dbo.VatRates_vatrateID" FOREIGN KEY ("vatrateID")
REFERENCES dbo."VatRates" (id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION,
table Product
"vatrateID" integer,
CONSTRAINT "FK_dbo.products_dbo.VatRates_vatrateID" FOREIGN KEY ("vatrateID")
REFERENCES dbo."VatRates" (id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
If i run:
using (var context = new DataModelsDbContext())
{
list = context.rowDocSale.Include(p => p.VatRate).Take(10).ToList();
}
Assert.AreEqual(1, list[0].VatRate.id);
Works fine
But If I run:
List<Product> list;
using (var context = new DataModelsDbContext())
{
list = context.Products.Include(p => p.VatRate).Take(10).ToList();
}
Assert.AreEqual(1, list[0].VatRate.id);
I get an error
Additional information: A specified Include path is not valid. The EntityType 'WebApplication1.Models.DataModels.Product' does not declare a navigation property with the name 'VatRate'.
I cant't understand what could be wrong...
Solved: I Don't know why, but this helped: it was:
public class Product : BaseModel, IExportable
{
public virtual VatRate VatRate { get; set; }
}
Now is:
public class Product : BaseModel, IExportable
{
public virtual VatRate VatRate_ { get; set; }
}