¿En qué escenarios iba a querer crear objetos de visita personalizadas de LINQ a resultados Sql?
-
01-10-2019 - |
Pregunta
Una simple consulta LINQ to SQL puede devolver un objeto producto. Obviamente, tenemos que podía pasar este objeto a mi capa de negocio, a continuación, leer y actualizar los datos, directamente contra dicho objeto.
he visto un montón de implementaciones en las que después de la ejecución de la consulta LINQ se asigna el objeto resultante (a través de AutoMapper o manualmente) para un objeto comercial personalizado. Así, en el caso del producto en el que podría tener el objeto LINQ:
Producto.IDProducto y Product.ProductName
y luego Yo definiría un objeto de negocio personalizada del producto así:
class BusineszProduct
{
string ProductId;
string ProductName;
}
y un código de mapeo simple como:
BusinessProduct myProduct = new BusinessProduct (); myProduct.ProductId = Producto.IDProducto; myProduct.ProductName = product.ProductName;
y luego pasar myProduct alrededor de mi capa de negocio, modificarlo, leerlo y así sucesivamente, a continuación, actualizar más adelante el objeto de LINQ.
En qué escenarios iba a querer crear la clase BusinessProduct personalizada?
Solución
En mi humilde opinión, la razón general es disociar / disentangle sus entidades comerciales de los equipajes Linq2SQL ORM que viene con Entidades Linq2Sql
Sin embargo, en un escenario extremo, puede tener varias asignaciones:
- Linq2Sql entidades de la capa de "Data Access" - sin embargo estos están fuertemente acopladas a la L2S DataContext
- POCOs / entidades comerciales serían utilizadas para la aplicación de reglas de negocio, validación, etc.
- Si está utilizando Servicios Web o WCF, también podría representar los datos como por ejemplo Mensaje Entidades si tiene que presentar las entidades en un formato muy específico cuando se serializan a través del cable
- Y por último, si usted tiene una arquitectura MVC / MVP / MVVM interfaz de usuario, es posible que desee entidades adaptadas para sus puntos de vista ??li>
Otros consejos
En mi solicitud, hago una consulta LINQ que une seis mesas diferentes, y proporciona un par de columnas de cada uno. No hay ningún tipo de objeto de tabla específica similar al programado de la información. De ahí que se crea una clase de negocios personalizada para controlar el conjunto de registros.
Se puede ver usted mismo (en http://www.njtheater.org )
SELECT de la tabla Productions
por fecha. Se une a la mesa de juego (donde consigo el título y descripción), la tabla Troupes (donde consigo el nombre de la compañía de teatro), la tabla Lugares (donde consigo el nombre de teatro y ciudad). Reproduce la mesa se une a la mesa PlayCredits que une la tabla Personas (donde consigo los nombres de los dramaturgos)