Код: Выделить всё
public void RejectOrder(Guid orderId, string note)
{
var order = _offerDetails
.Select(offerDetail => offerDetail.Offers.FirstOrDefault(offer => offer.OrderId == orderId)?.Order)
.FirstOrDefault();
if (order == null)
{
throw new KeyNotFoundException("Order for this customer was not found.");
}
order.MarkAsRejected();
}
Потенциальное решение, которое мы рассматриваем, - добавить CustomerId в объект Order и сохранить его напрямую. Это позволило бы прямой запрос заказа таблицы по customerid и orderid , сокращение потребности в тратрах. Или
концепция владения? < /li>
Нарушение каких-либо общих принципов нормализации или дизайна базы данных? introducing a redundancy like CustomerId in Order is a valid and pragmatic pattern in such cases.
EDIT
To clarify, we are using EF Core and currently access related entities through the domain model (i.e., Customer → OfferDetail → Offer → Order) in memory. Это преднамеренное и укоренено в нашем дизайне DDD, где клиент является корневым заполнителем. Проблема производительности связана не с соединением SQL, а скорее в памяти в памяти все более крупных коллекций. Мы рассматриваем денормализацию модели данных, добавив CustomerId в объект Order , поэтому мы можем обойти траверс и напрямую запросить заказа от customerId и OrderId . Мы хотим оценить, разбивает ли это границы совокупности или вводит неприемлемое избыточность в контексте DDD.
Подробнее здесь: https://stackoverflow.com/questions/796 ... design-pri