Как сопоставить свойство суммы (например, TotalPrice) в Entity Framework Code First - PullRequest
5 голосов
/ 20 июня 2011

Сначала я использую Entity Framework 4.1.И у меня есть классический образец: Order и OrderLines.Каждая OrderLine имеет свою собственную цену, и я хотел бы иметь свойство TotalPrice для Order.

Сейчас я не уверен объявить свойство TotalPrice.Я могу определить его как readonly с помощью linq sum, но когда каждый раз, когда я добавляю его в набор результатов, он должен извлекать все строки заказа из db для суммирования своих цен.

Я думаю о решении, которое хранит totalpriceбазы данных (для запросов) и пересчитывать только перед сохранением заказа (или если изменяется строка заказа), но я не знаю, как это сделать.

Как обрабатывать подобные сценарии в EF?

Спасибодля предложений Петр

Ответы [ 2 ]

0 голосов
/ 22 июня 2011

Моя причина хранить общую цену - производительность. У меня уже есть класс контракта, который содержит заказы (а также свойство TotalPrice). Когда я не сохраняю итоговую цену и хочу выбрать список контрактов (например, в сетку), он всегда должен читать все заказы и их строки.

0 голосов
/ 20 июня 2011

Ради простоты я бы рекомендовал не хранить, а просто добавлять метод вычисления в частичный класс. Мы делали это раньше с суффиксом *Methods. Например:

Order.cs:

public partial class Order 
{       
   public ICollection<OrderLine> OrderLines { get;set; }
   //Other EF Properties
}

OrderLine.cs:

public partial class OrderLine 
{       
   public double Price { get;set; }
   //Other EF Properties
}

OrderMethods.cs

public partial class Order 
{
    public double GetTotalPrice() 
    {
        // Total price calculation
    }
}
...