www org mapwindows mapwindow espaƱol c# database linq-to-sql entity-framework

c# - org - mapwindows 5



.NET y capas de base de datos (6)

"¿Es este un enfoque común hoy? Quiero decir, ¿todos los que usan el framework .NET 3.5 realmente ejecutan sqlmetal en su proceso de construcción, o qué?"

Las personas que conozco que usan el Framework 3.5 (y eso es casi todo el mundo), la gran mayoría, todavía usan NHibernate. La versión 2.0 es una muy bonita OR / M. Empecé a usarlo en un proyecto reciente y redujo significativamente mi código de acceso a datos, hasta el punto en que realmente no quiero usar nada más en el futuro. Y la API Fluent NHibernate está haciendo avances para las personas que no les gusta el mapeo XML.

La última vez que trabajé en programación, intentamos alejarnos de los DataReaders y la tradicional API de ADO.NET hacia Object Relational Mapping (ORM).

Para hacer esto, generamos un DataContext de nuestro DB a través de sqlmetal . Había entonces una delgada capa de datos que hacía que el DataContext private , y cualquier código que necesitara acceder a la base de datos tendría que usar un método public en esta delgada capa de datos. Estos métodos eran básicamente procedimientos almacenados; realizarían consultas en la base de datos a través de LINQ to SQL.

¿Es este un enfoque común hoy? Quiero decir, ¿todos los que utilizan el framework .NET 3.5 realmente ejecutan sqlmetal en su proceso de compilación, o qué? Casi parecía un truco en ese momento.

Básicamente, me gustaría saber si LINQ to SQL y sqlmetal es qué esperar si voy a escribir un DAL hoy en una tienda .NET 3.5 que no emplea un ORM de código abierto de terceros.


Creo que depende de tu uso, pero diría que con una capa de datos tan delgada como la que explicaste sería tu DAL. La mayoría de los proyectos construirán otra capa encima de eso principalmente para la lógica de edición / creación y tal vez un poco de lógica de costura para get.

Para la mayoría de mis proyectos, lo diseño así.

El repositorio contiene la instancia de DataContext y expone algunos métodos básicos de agregar / eliminar
ProductRepository: Repository expone consultas generales (IQueryable)
StoreService utiliza una instancia de repositorios diferentes como ProductRepository, SalesRepository y maneja toda la lógica para crear algo así como un producto.

Entonces algo así como ...

StoreService.CreateProduct(/* properites */)

Esto devolvería algún tipo de clase de resultado.


Este mismo sitio usa LINQ to SQL, así que tómalo como quieras.

Oficialmente, Microsoft está apoyando a Entity Framework sobre LINQ to SQL en términos de nuevo desarrollo. Sin embargo, hay un grupo vocal de personas que piensan que EF es el camino equivocado . LINQ to SQL seguirá existiendo por un tiempo, y es un ORM muy decente, aunque algo limitante en términos de qué back-end DB puede usar.

Recomendaría LINQ como un excelente punto de partida para su ORM. Si necesita algo mejor, consulte EF y / o NHibernate .


Todavía se considera una mejor práctica tener algún tipo de capa de acceso a datos. Si esto se logra mejor con un ORM es un tema muy debatido. Hay una facción que generalmente argumenta que los ORM son el camino a seguir. Otra facción argumenta que los procedimientos almacenados y la base de datos centrados es la mejor ruta.

Además, este puede no ser exactamente el póster que usted quiso decir, pero es similar (y también el que está en mi cubículo)

http://download.microsoft.com/download/4/a/3/4a3c7c55-84ab-4588-84a4-f96424a7d82d/NET35_Namespaces_Poster_LORES.pdf


Tu enfoque es bueno. Actualmente uso los servicios de Astroria ( ADO.NET Data Services ). Hubo una buena introducción en MSDN Magazine sobre esto.

También me gusta el nuevo PLINQO (requiere CodeSmith Tools ). Esto es muy astuto en mi opinión.

Cuando tengo una DAL (capa de servicio), solo consumo este servicio desde mi aplicación cliente (Silverlight o ASP.NET MVC).