5

Uso primero el código de entity framework 4.1. Y tengo una muestra clásica: Order y OrderLines. Cada OrderLine tiene su propio precio y me gustaría tener la propiedad TotalPrice en orden.Cómo mapear la propiedad de suma (como TotalPrice) en el código de Entity Framework Primero

No estoy seguro de declarar la propiedad TotalPrice. Puedo definirlo como de solo lectura con linq sum, pero cada vez que lo agregue al conjunto de resultados, debe obtener todas las líneas de pedido de db para sumar los precios.

Estoy pensando en la solución, que almacena el precio total en la base de datos (para consultas) y recalcula solo antes de ordenar (o si la línea de pedido cambia), pero no sé cómo hacer eso.

¿Cómo manejar escenarios como este en EF?

Gracias por sugerencias Petr

Respuesta

0

En aras de la simplicidad, yo recomendaría no solo el almacenamiento y la adición de un método de cálculo a una clase parcial. Hemos hecho esto antes con un sufijo *Methods. Por ejemplo:

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 
    } 
} 
+0

Esta solución no almacena TotalPrice en db, por lo que si tengo que mostrarla siempre debo recalcular, y esto es lo que quiero evitar. – Petr

+0

En este escenario, 'Order' es su raíz de agregado, por lo que tiene sentido que siempre esté trabajando con su colección de instancias de' OrderLine' en el contexto de su 'Order'; ya sea que estén cargadas o cargadas de forma lenta. el 'Orden'. Entonces, cuando agrega otro 'OrderLine', el cálculo del precio total se vuelve arbitrario y no hay una razón real para almacenarlo. – ataddeini

+0

Cuando veo la lista de pedidos (nombre, cliente y precio total), quiero evitar cargar OrderLines para cada pedido – Petr

0

Mi razón para almacenar precio total es el rendimiento. Ya tengo clase contractual, que contiene pedidos (y también tiene propiedad TotalPrice). Cuando no almaceno el precio total, y quiero seleccionar una lista de contratos (a la cuadrícula, por ejemplo), siempre debe leer todos los pedidos y sus líneas.

Cuestiones relacionadas