ahmed_sa Ответов: 2

Какую модель вы выберете в качестве базы для просмотра формы ввода заказа на продажу ( модель salesfooter или модель заголовка продажи) ?


Я работаю в проектной работе в asp.net ядро 2.1 visual studio 2017 SQL Server 2012


Мне действительно нужно сделать так, чтобы форма ввода заказа на продажу состояла из модели заголовка продаж и модели нижнего колонтитула продаж


в форме ввода заказа на продажу

on Header(represent by Sales Header Model) 
SalesOrderNO   1
SalesYear      2019
SalesDate      2019-01-17
BranchCode     1
SalesTypeNo    1
CustomerNo     2509
on Footer(represent by Sales Footer Model)
SalesLineNo ItemCode  Quantity  Price Total
1            12929       5        10   50
2            17918       4         5   20


Результат процесса выше при сохранении заказа


Одна запись добавлена в таблицу заголовков продаж.
Две записи добавлены в таблицу нижнего колонтитула продаж.


так что какую модель я выберу, чтобы она была основана на заказе на продажу (нижний колонтитул продаж или Верхний колонтитул продаж) :

Что я уже пробовал:

<pre lang="c#">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; }

2 Ответов

Рейтинг:
0

MadMyche

Ваша модель SalesHeader содержит всю "базовую" информацию о заказе, и последнее свойство этой модели-это коллекция всех элементов SalesHeader (подробности). По этой причине я бы использовал полностью заполненный SalesHeader в качестве SalesOrder.

Если бы SalesHeader не содержал коллекцию SalesHeader, я бы предложил новую модель SalesOrder, которая имела бы 2 свойства: SalesHeader и SalesFooter.


ahmed_sa

спасибо за ответ
а насчет свойства продаж Нижний горячий, чтобы получить их

MadMyche

перечислите список

foreach(SalesFooter sf in SalesFooters) {
  // do what you want with "sf" object instance
}

Рейтинг:
0

Maciej Los

Внимательно посмотрите на свои модели, особенно на подчеркнутые линии:

Модель Заголовка Продаж

public int SalesOrderNo { get; set; }  //1
public int SalesYear { get; set; }
public int BranchCode { get; set; }
public int SalesType { get; set; } //2
public DateTime SalesDate { get; set; }
public int CustomerID { get; set; }
public Customer Customers { get; set; }
public ICollection<SalesFooter> SalesFooters { get; set; } //3


Модель нижнего колонтитула продаж
public int SalesOrderNo { get; set; } //1
public int SalesLineNo { get; set; }
public int SalesType { get; set; } //2
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; } //3


1. SalesOrder является общей частью обеих моделей.

2. SalesType, аналогично SalesOrder, является общей частью обеих моделей.

3. Коллекции SalesHeader и SalesFooter они связаны друг с другом.

Это звучит как плохой дизайн!

В вашем случае вам нужно создать отношение "один ко многим", где
SalesOrder         SalesOrderDetails
SalesOrderNo (PK) 1 -> SalesOrderNo (FK)

* PK - первичный ключ
* FK - внешний ключ

Давайте проиллюстрируем это на реальных данных:
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


Итак, перепишите свои модели, чтобы отразить вышеприведенные данные. Заметить что SalesOrderNo поле, которое вы можете скрыть в поле зрения.

Пожалуйста, прочтите подробнее об этом Реляционная база данных[^]

[РЕДАКТИРОВАТЬ]
Пример:
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);
			}
	}
	
	
		
	
}

// Define other methods and classes here
public class SalesOrder //SalesHeader
{
	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 // SalesFooter
{
	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;}	
}


Результат:
=== 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

Удачи вам!