EF Core mapping wrong property name

Viewed 74

This is my first web application using ASP.NET Core 5+.

Please consider the following fluent chains:

modelBuilder.Entity<Category>().ToTable("Category");
modelBuilder.Entity<Item>().ToTable("Item");
modelBuilder.Entity<ItemCode>().ToTable("ItemCode");
modelBuilder.Entity<ItemType>().ToTable("ItemType");
modelBuilder.Entity<Customer>().ToTable("Customer");
modelBuilder.Entity<OrderStatus>().ToTable("OrderStatus");
modelBuilder.Entity<Order>().ToTable("Order");
modelBuilder.Entity<OrderItem>().ToTable("OrderItem");
modelBuilder.Entity<OrderTax>().ToTable("OrderTax");

modelBuilder.Entity<Item>()
.HasOne<Category>(s => s.Category)
.WithMany(c => c.Items)
.HasForeignKey(p => p.CategoryName)
.HasPrincipalKey(c => c.Name).IsRequired();

modelBuilder.Entity<Item>()
.HasOne(s => s.ItemType)
.WithMany(c => c.Items)
.HasForeignKey(p => p.ItemTypeName)
.HasPrincipalKey(c => c.Name).IsRequired();

modelBuilder.Entity<Item>()
.HasOne(s => s.ItemCode)
.WithMany(c => c.Items)
.HasForeignKey(p => p.ItemCodeName)
.HasPrincipalKey(c => c.Name).IsRequired();

modelBuilder.Entity<Order>()
.HasOne(s => s.OrderStatus)
.WithMany(c => c.Orders)
.HasForeignKey(p => p.OrderStatusName)
.HasPrincipalKey(c => c.Name).IsRequired();

modelBuilder.Entity<Order>()
.HasOne(s => s.Customer)
.WithMany(c => c.OrdersCustomer)
.HasForeignKey(p => p.CustomerName)
.HasPrincipalKey(c => c.Name).IsRequired();

 modelBuilder.Entity<OrderItem>()
.HasOne<Order>(s => s.Order)
.WithMany(c => c.OrderItemsOrders)
.HasForeignKey(p => p.Name)
.HasPrincipalKey(c => c.Name)
.IsRequired();

modelBuilder.Entity<OrderItem>()
.HasOne<Item>(s => s.Item)
.WithMany(c => c.OrderItems)
.HasForeignKey(p => p.ItemName)
.HasPrincipalKey(c => c.Name)
.IsRequired();

modelBuilder.Entity<OrderTax>()
.HasOne<Order>(s => s.Order)
.WithMany(c => c.OrderTaxesOrders)
.HasForeignKey(p => p.OrderName)
.HasPrincipalKey(c => c.Name)
.IsRequired();

but the EF mapping for Pages\OrderItems\Create.cshtml.cs is: (generated automatically)

ViewData["ItemName"] = new SelectList(_context.Items, "Name", "CategoryName");
ViewData["Name"] = new SelectList(_context.Orders, "Name", "CustomerName");
return Page();

where as this should be:

ViewData["ItemName"] = new SelectList(_context.Items, "Name", "ItemName");
ViewData["Name"] = new SelectList(_context.Orders, "Name", "OrderName");
return Page();

The model classes are:

public class OrderItem
{
    public int OrderItemID { get; set; }
    public string Name { get; set; }
    public Order Order { get; set; }
    public string ItemName { get; set; }
    public Item Item { get; set; }
    public int Quantity { get; set; }
}

public class OrderTax
{
    public int OrderTaxID { get; set; }
    [Required] public string Name { get; set; }
    public int Percentage { get; set; }
    public string OrderName { get; set; }
    public Order Order { get; set; }
}

and in Item model class I have public List<OrderItem> OrderItems { get; set; }.

and in the Order class I have public List<OrderItem> OrderItemsOrders { get; set; } and public List<OrderTax> OrderTaxesOrders { get; set; }

all the other models and mappings are working as expected, I'm having bad time making this work.

PS: I can edit the needed mappings manually by editing the files, but as per ef this should be automatically mapped.

I'm aware that I'm doing something wrong, but haven;t found anything related to this while googling.

Any help & suggestions are welcome, thanks in advance.

0 Answers
Related