Take a closer look at your models, especially at underlined lines:
Sales Header Model
public int SalesOrderNo { get; set; }
public int SalesYear { get; set; }
public int BranchCode { get; set; }
public int SalesType { get; set; }
public DateTime SalesDate { get; set; }
public int CustomerID { get; set; }
public Customer Customers { get; set; }
public ICollection<SalesFooter> SalesFooters { get; set; }
Sales Footer model
public int SalesOrderNo { get; set; }
public int SalesLineNo { get; set; }
public int SalesType { get; set; }
public int BranchCode { get; set; }
public string ItemCode { get; set; }
public decimal Quantity { get; set; }
public decimal UnitPrice { get; set; }
public decimal Total { get; set; }
public Items Itemes { get; set; }
public SalesHeader SaleHeaders { get; set; }
1.
SalesOrder
is common part of both models.
2.
SalesType
, similary to
SalesOrder
, is common part of both models.
3. Collections of
SalesHeader
and
SalesFooter
are related to each other.
This sounds like bad design!
In your case, you need to create one-to-many relationship, where
SalesOrder SalesOrderDetails
SalesOrderNo (PK) 1 -> ∞ SalesOrderNo (FK)
*
PK
- Primary Key
*
FK
- Foreign Key
Let's illustrate it on real data:
SalesOrders (SalesHeader)
SalesOrderNO 1
SalesYear 2019
SalesDate 2019-01-17
BranchCode 1
SalesTypeNo 1
CustomerNo 2509
SalesOrderDetails (SalesFooter)
SalesOrderNo SalesLineNo ItemCode Quantity Price Total
1 1 12929 5 10 50
1 2 17918 4 5 20
So, rewrite your models to mirror above data. Note, that
SalesOrderNo
field you can hide in view.
Please, read more about
Relational database[
^]
[EDIT]
Example:
void Main()
{
List<SalesOrder> orders = new List<SalesOrder>()
{
new SalesOrder(){SalesOrderNo = 1, SalesDate = new DateTime(2019,1,17), BranchCode = 1, SalesTypeNo = 1, CustomerNo = 2509},
new SalesOrder(){SalesOrderNo = 2, SalesDate = new DateTime(2019,1,17), BranchCode = 2, SalesTypeNo = 2, CustomerNo = 3945}
};
List<SalesOrderDetails> details = new List<SalesOrderDetails>()
{
new SalesOrderDetails(){SalesDetailNo = 1, SalesOrderNo = 1, SalesLineNo = 1, ItemCode = 12929, Quantity = 5, Price = 10, Total = 50},
new SalesOrderDetails(){SalesDetailNo = 2, SalesOrderNo = 1, SalesLineNo = 2, ItemCode = 17918, Quantity = 4, Price = 5, Total = 20},
new SalesOrderDetails(){SalesDetailNo = 3, SalesOrderNo = 1, SalesLineNo = 3, ItemCode = 13546, Quantity = 5, Price = 6, Total = 30},
new SalesOrderDetails(){SalesDetailNo = 4, SalesOrderNo = 1, SalesLineNo = 4, ItemCode = 11001, Quantity = 100, Price = 7, Total = 700},
new SalesOrderDetails(){SalesDetailNo = 5, SalesOrderNo = 2, SalesLineNo = 1, ItemCode = 12828, Quantity = 20, Price = 8, Total = 160},
new SalesOrderDetails(){SalesDetailNo = 6, SalesOrderNo = 2, SalesLineNo = 2, ItemCode = 15467, Quantity = 5, Price = 12, Total = 60},
new SalesOrderDetails(){SalesDetailNo = 7, SalesOrderNo = 2, SalesLineNo = 3, ItemCode = 18741, Quantity = 3, Price = 30, Total = 90},
new SalesOrderDetails(){SalesDetailNo = 8, SalesOrderNo = 2, SalesLineNo = 4, ItemCode = 13698, Quantity = 2, Price = 100, Total = 200},
new SalesOrderDetails(){SalesDetailNo = 9, SalesOrderNo = 2, SalesLineNo = 5, ItemCode = 12587, Quantity = 8, Price = 8, Total = 64},
};
foreach(SalesOrder SalesHeader in orders)
{
Console.WriteLine("\n{0}{1}{2}", new string('=', 3), " Order ", new string('=', 3));
Console.WriteLine("SalesOrderNo: {0}\nSalesDate: {1}\nSalesYear: {2}\nBranchCode: {3}\nSalesTypeNo: {4}\nCustomerNo: {5}",
SalesHeader.SalesOrderNo, SalesHeader.SalesDate, SalesHeader.SalesYear, SalesHeader.BranchCode, SalesHeader.SalesTypeNo, SalesHeader.CustomerNo);
Console.WriteLine("{0}{1}{2}", new string('=', 3), " Order details ", new string('=', 3));
List<SalesOrderDetails> items = details.Where(x=>x.SalesOrderNo==SalesHeader.SalesOrderNo).ToList();
foreach(SalesOrderDetails SalesFooter in items)
{
Console.WriteLine("SalesLineNo: {0}\tItemCode: {1}\tQuantity: {2}\tPrice: {3}\tTotal: {4}",
SalesFooter.SalesLineNo, SalesFooter.ItemCode, SalesFooter.Quantity, SalesFooter.Price, SalesFooter.Total);
}
}
}
public class SalesOrder
{
public int SalesOrderNo {get; set;}
public DateTime SalesDate {get; set;}
public int SalesYear {get=>SalesDate.Year;}
public int BranchCode {get; set;}
public int SalesTypeNo {get; set;}
public int CustomerNo {get; set;}
}
public class SalesOrderDetails
{
public int SalesDetailNo {get; set;}
public int SalesOrderNo {get; set;}
public int SalesLineNo {get; set;}
public int ItemCode {get; set;}
public int Quantity {get; set;}
public decimal Price {get; set;}
public decimal Total {get; set;}
}
Result:
=== Order ===
SalesOrderNo: 1
SalesDate: 2019-01-17 00:00:00
SalesYear: 2019
BranchCode: 1
SalesTypeNo: 1
CustomerNo: 2509
=== Order details ===
SalesLineNo: 1 ItemCode: 12929 Quantity: 5 Price: 10 Total: 50
SalesLineNo: 2 ItemCode: 17918 Quantity: 4 Price: 5 Total: 20
SalesLineNo: 3 ItemCode: 13546 Quantity: 5 Price: 6 Total: 30
SalesLineNo: 4 ItemCode: 11001 Quantity: 100 Price: 7 Total: 700
=== Order ===
SalesOrderNo: 2
SalesDate: 2019-01-17 00:00:00
SalesYear: 2019
BranchCode: 2
SalesTypeNo: 2
CustomerNo: 3945
=== Order details ===
SalesLineNo: 1 ItemCode: 12828 Quantity: 20 Price: 8 Total: 160
SalesLineNo: 2 ItemCode: 15467 Quantity: 5 Price: 12 Total: 60
SalesLineNo: 3 ItemCode: 18741 Quantity: 3 Price: 30 Total: 90
SalesLineNo: 4 ItemCode: 13698 Quantity: 2 Price: 100 Total: 200
SalesLineNo: 5 ItemCode: 12587 Quantity: 8 Price: 8 Total: 64
Good luck!