.net database change-management

La mejor solución.NET para la base de datos cambiada con frecuencia



database change-management (12)

Me gustaría ver SubSonic con la configuración del proveedor de compilación (Proyecto de sitio web). Eso funciona muy bien porque regenera automáticamente los objetos DAL cada vez que construyes tu proyecto, de modo que si la base de datos cambia de una manera que rompe tu código, obtienes un error de compilación.

Funcionó bien hasta que el esquema de la base de datos se volvió realmente complejo y estábamos llegando a los límites del patrón ActiveRecord, pero mientras el esquema no sea muy complejo, funciona bastante bien. Una vez que el esquema se estabilice, puede cambiar para que solo construya el DAL cuando lo desee.

Actualmente estoy diseñando una pequeña aplicación CRUD. Su base de datos es un gran desastre y cambiará con frecuencia en el transcurso de los próximos 6 meses a un año. ¿Qué recomendarías para mi capa de datos?

1) ORM (en caso afirmativo, ¿cuál?)

2) Linq2Sql

3) Procedimientos almacenados

4) Consultas parametrizadas

Realmente necesito una solución que sea lo suficientemente dinámica (tanto rápida como sencilla) donde pueda reemplazar tablas y agregar / eliminar columnas con frecuencia.

Nota: No tengo mucha experiencia con ORM (solo un poco de SubSonic) y generalmente tiendo a usar procedimientos almacenados, así que tal vez ese sería el camino a seguir. Me encantaría aprender Ling2Sql o NHibernate si cualquiera de ellos permite la situación que he descrito anteriormente.


Una cosa clave a tener en cuenta aquí es que si el esquema de la base de datos está cambiando con frecuencia, desea tener algún nivel de seguridad de tipo de tiempo de compilación. He encontrado que esto es un problema con NHibernate porque usa archivos de mapeo xml así que si cambias algo en tu esquema de base de datos, no sabes hasta el momento de ejecución que la asignación está rota.

También será un problema con los procesos almacenados.

El uso de Linq2Sql le dará la ventaja de saber dónde se está rompiendo exactamente el código cuando cambia un esquema en tiempo de compilación. Esto para mí, es algo que tendría prioridad sobre todo lo demás si estoy trabajando con un esquema que cambia frecuentemente


Ya estás contento con los procesos almacenados y pueden ser suficientes para abstraer el esquema cambiante. Si los ORM no están contentos con los procesos almacenados, quizás trabajen con Vistas que mantengas al día sobre el esquema cambiante.


NHibernate , pero solo si usted es susceptible de tener un enfoque de primer objeto donde define sus clases, y luego define la estructura de tabla deseada en los archivos de mapeo, y luego crea un esquema de base de datos utilizando las clases de generación de esquema incorporadas de NHibernate.

Para hacerlo al revés (por ejemplo, tienes un montón de tablas y luego basas tu diseño de objetos en eso) he encontrado que MyGeneration + NHibernate funciona, aunque no estoy muy contento con las clases resultantes (principalmente porque Soy tan fiel a la verdadera Programación Orientada a Objetos).


Si estuviera en su lugar, trataría de aprovechar lo que sabía (sprocs) con Linq2Sql. Linq2Sql aún puede usar sus sprocs, pero luego tiene la ventaja adicional de poner una nueva herramienta en su cinturón. Creo que tener una comprensión del Linq2XXX (X es una tecnología aleatoria, no entretenimiento para adultos ... que no es una mala idea ahora que lo pienso) la sintaxis y la metodología serán una gran adición a tu conjunto de habilidades usando Linq sobre una colección de objetos es muy dulce.

Pero finalmente, algo como NHibernate te irá mejor a largo plazo.


Definitivamente quieres usar un ORM. Cualquier ORM está bien, pero quieres algo que genere clases fuertemente tipadas. Cuando los campos se agregan, modifican o eliminan de una tabla, usted quiere poder regenerar esas clases, y solo puede corregir los errores de tiempo de compilación. Si usa un modelo dinámico, es probable que tenga muchos errores desagradables en el tiempo de ejecución. ¡Esto es muy importante! Soy parte del equipo de desarrollo de MyGeneration en sourceforge, y creo que es una gran solución para su problema. Puedes generar dOOdads, NHibernate, EasyObjects, EntitySpaces, etc. Si quieres ir con una solución más cara, ve con CodeSmith o LLBLGen Pro . Buena suerte: cualquier persona interesada en usar MyGeneration, no dude en ponerse en contacto conmigo con preguntas.


Si el esquema de la base de datos cambia a menudo, prefiera Entity Framework sobre LINQ2SQL. Si el esquema cambia, usando L2S tienes que
1) Eliminar y volver a agregar su tabla (perdiendo sus personalizaciones)
2) Modifique el modelo a mano (como se hace aquí en )

El EF es un superconjunto de L2S, que le da más flexibilidad de uso y dbms-independencia


Cualquier solución puede funcionar, lo que realmente necesitas es un conjunto de pruebas que garanticen que funcione de manera básica, como insertar, seleccionar, actualizar y eliminar. De esta manera, simplemente puede ejecutar sus pruebas y verificar si las asignaciones están actualizadas.


mira por qué está cambiando, y mira si puedes anticipar y generalizar los tipos de cambios que te llegan para que no rompan tu código

un marco puede hacer que acomodar los cambios sea más fácil, pero un análisis más profundo tendrá un beneficio a más largo plazo


EntitySpaces puede regenerar su DAL / Business Layer en un minuto, y sin pérdida de código, consulte la versión de prueba ==> AQUÍ

No es necesario registrarse, también se ejecuta en Visual Studio.


¿Qué tan simple es la aplicación? Si tuviera que trabajar con esquema / diseño por un par de meses, y no me preocupara realmente por una aplicación real. . . Consideraría usar EDM y un proyecto de aplicación web de entidades de datos dinámicos. Esto funciona con la menor cantidad de esfuerzo, en mi opinión. Esto lo mantiene enfocado en el esquema, los datos y otras cosas de Groovey. ¡Espero no obtener demasiados baches neg de este!

Así es como el nuevo diálogo del proyecto se verá así


Use EntitySpaces. me enviarás flores, garantizado simplemente sorprendente. cambia el db a tu gusto. presiona el botón, bang. todos sus cambios están hechos. sin cambiar su código personalizado. Lo amo.