I'm getting the following error on an Entity Framework Core MVC app. Can anyone help with why? I'm including simplified versions of my Models below.
InvalidOperationException: The expression 'b.BrandId' is invalid inside an 'Include' operation, since it does not represent a property access: 't => t.MyProperty'. To target navigations declared on derived types, use casting ('t => ((Derived)t).MyProperty') or the 'as' operator ('t => (t as Derived).MyProperty'). Collection navigation access can be filtered by composing Where, OrderBy(Descending), ThenBy(Descending), Skip or Take operations.
I have a Products table and a Brands table. Brands are unique and Products can only have one Brand, but there can be many Products for a single Brand.
The Products model and Brand model:
public class Product
{
public int Id { get; set; }
public string Name { get; set; }
public int BrandId { get; set; }
public virtual Brand Brand { get; set; }
public Product()
{
Brand = new Brand();
}
}
public class Brand
{
public int BrandId { get; set; }
public string BrandName { get; set; }
}
Then in my ProductsController this is what throws the above error. The include Brand part is so I can show the BrandName on my Index page and it is there that the error can be traced to:
// GET: Products
public async Task<IActionResult> Index()
{
return View(await _context.Products.Include(b => b.Brand)
.OrderByDescending(d => d.CreatedDate)
.AsNoTracking().ToListAsync());
}
b.BrandId
in your.Include
, notb.Brand
. – atiyarBrand
initialization from yourProduct
constructor, otherwise the properties ofBrand
will not be set. – atiyar