Pregunta

Estoy preparando un nuevo proyecto de Windows y me pregunto qué tipo de tecnología DAL usar. Originalmente estaba buscando algo más simple para no pasar demasiado tiempo construyéndolo. Pero también entiendo que tiene que ser eficiente y escalable a largo plazo.

Planeo usar el cliente WPF (MVVM) y el servicio WCF en un sistema de 3 niveles.

Solo para resumir todas las tecnologías existentes con las que estoy familiarizado:

DataSets

PRO: Puede ser un poco anticuado, pero muy fácil de usar y permite que la mayoría de las partes se generen automáticamente para usted. Un aspecto poderoso sobre los conjuntos de datos es la facilidad de atravesar datos relacionados a través de las Relaciones. También, de alguna manera, está desconectado de la base de datos y podría simplificar las actualizaciones al encargarse de las marcas de tiempo automáticamente. Incluye validación.

CONTRA: bastante anticuado. Algunos los consideran como objetos / modelos comerciales reales, sino como un espejo de sus tablas de datos SQL. Pasarlos entre WCF Service / Client puede ser más difícil que los objetos de negocio creados por uno mismo.

Enterprise Library 4.1 - Bloque de acceso a datos

PRO: El DAL se coloca maravillosamente en un patrón Factory. Se encarga de abrir y cerrar la conexión automáticamente. Muy fácil de usar en su mayor parte. Admite conjuntos de datos y SQL Sps normales para crear sus propios objetos de negocios. Como parte de un Marco continuo, puede ser mucho más eficiente usarlo en combinación con el resto de la Biblioteca Enterprise para un producto final eficiente.

CONTRA: ??

Linq to SQL

PRO: Auto crea las tablas SQL en objetos de negocios. Fácil de CRUDO. Teóricamente, es una forma muy agradable de hacerlo.

CONTRA: Después de haber jugado con él cuando salió, lo encontré escamoso ya veces inestable. Ya se considera una tecnología muerta después del anuncio de Microsoft de que Entity Framework 4.0, como parte de .NET 4.0, será la forma recomendada por Microsoft. Solo se esperan pocas correcciones de errores en .NET 4.0, pero no más planes de extensión de características.

Entity Framework 4.0

No sé nada al respecto, pero solo eso eventualmente reemplazará todo lo demás como en .NET 4.0. También estoy tentado a usarlo, sin embargo, dado que todavía está en BETA, todavía no podría hacerlo.

Estoy muy tentado a usar Enterprise Library 4.1 - Data Access Block y crear mis propios objetos de negocios. La gran desventaja es que llevará más tiempo crear el DAL. A menos que alguien pueda convencerme de usar DataSets a través del Bloque de acceso a datos.

¿Cuáles son tus comentarios e ideas? Muchas gracias, Kave

¿Fue útil?

Solución

Usted menciona Entity Framework como parte de " contra " para la opción Linq to SQL, pero debe considerarla en lugar de Linq to SQL: proporciona prácticamente la misma funcionalidad y más. Para proyectos con bases de datos más pequeñas, definitivamente ofrece mucho dinero. Administrar el contexto para bases de datos más grandes puede ser un desafío en EF, y los cambios en el esquema pueden hacer que las cosas se rompan, pero estos desafíos existen con cualquier enfoque de acceso a datos.

La mayor desventaja para EntLib, en mi opinión, es que todavía está rodando sus propios objetos de datos. La Biblioteca Enterprise le quita gran parte del código de plomería a una "vieja escuela" directa. Implementación de ADO.NET, lo cual es bueno, pero no genera objetos de datos para usted que puedan usarse de forma inmediata para las consultas LINQ.

Otros consejos

Anteriormente utilizamos DataSets con el Bloque de aplicación de datos EntLib 4.1.

Ahora usamos Entity Framework. Hemos logrado una mejora masiva en la productividad con Entity Framework en comparación con EntLib 4.1. (Programe la capa de datos para 80 tablas en 10 horas en lugar de 80)

Entity Framework 4 todavía está en Beta, pero si pasa un tiempo antes de que su proyecto se ponga en marcha, elegiría EF 4. Obtendrá la productividad de un ORM al mismo tiempo la flexibilidad de usar POCO (Plain Old Clr Objetos)

A. Compruebe también NHibernate.

B. DataSet: el más rápido y fácil, pero codifica mucho.

Todo lo demás: es muy bueno usar las herramientas ORM, pero hay muchos problemas con 3 niveles con ellas.

(la carga diferida es un problema con el que lidiar, ya que hay muchos árboles de objetos grandes que afectan el rendimiento, el almacenamiento en caché no es lo más inteligente posible)

Entonces, depende de cuáles sean sus principales necesidades y de cuánto tiempo desea pasar estudiando EL / LINQ o NHibernate antes de comenzar a codificar, b / c hay una curva de aprendizaje con estas herramientas.

La mejor idea es tener la oportunidad de usar ambas tecnologías al mismo tiempo. ¿Cómo puedes hacerlo? Es muy simple con el patrón de repositorio. Al principio necesita crear una interfaz genérica IRepository. Algo le gusta esto:

public interface IERepository<E>
{
    DbTransaction BeginTransaction();
    void EndTransaction();
    void Add(E entity);
    void Delete(E entity);
    int Save();

    ObjectQuery<E> DoQuery(string entitySetName);
    IList<E> SelectAll(string entitySetName);
    E SelectByKey(int Key);

    bool TrySameValueExist(string fieldName, object fieldValue, string key);
    bool TryEntity(ISpecification<E> selectSpec);

    int GetCount();
    int GetCount(ISpecification<E> selectSpec);
    int AddAndSave(E entity);

}

Prefiero Entity Framework. Creé 3 proyectos basados ??en ello. Funciona muy rápido, especialmente consultas con paginación. Entonces, después de que necesite crear un repositorio de clase genérico base con métodos virtuales que implementen la interfaz IRepository. Y eso es todo.  Ahora tiene una forma muy rápida de crear DAl escribiendo código simple como este:

public class MonthRepository:Repository<Month>
{

}

Tiene la posibilidad de anular todos los métodos de la clase base y crear acceso a la base de datos utilizando el procedimiento almacenado donde lo necesite. Y puede hacerlo sin cambiar el código en otros lugares. Todavía devolverá el mismo tipo de entidades, pero las obtendrá de otra manera.

Lea más en http://www.codeproject.com/KB/database/ ImplRepositoryPatternEF.aspx

NHibernate tiene la mejor combinación general de conjunto de características, madurez y soporte.

NHibernate, Entity Framework, registros activos o linq2sql

Debe considerar que el soporte de Linq es una prioridad para cualquier solución que considere y sus dos primeras opciones anteriores no son compatibles con Linq.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top