Al salir de un proyecto usando Linq2Sql, sospecho que el próximo (más grande) podría empujarme a los brazos de Entity Framework. He leído un poco sobre el tema, pero lo que no he logrado encontrar es una historia coherente sobre cómo las herramientas de datos de SQL Server y Entity Framework deberían / podrían / podrían usarse juntas.
- ¿Fueron concebidos totalmente por separado, y usarlos juntos está acariciando el camino equivocado?
- ¿Son de alguna manera totalmente ortogonales y me estoy perdiendo el punto?
Algunas razones por las que creo que podría querer ambas:
- SSDT es ideal para tener 'compilado' (marcado) y sql y esquema fácilmente versionables
- Pero la historia de 'migración / actualización' de SSDT no es convincente (para mí): "Actualizar cualquier cosa" funciona bien para el esquema, pero no hay forma (AFAIK) de que pueda funcionar para los datos.
- Por otro lado, no he probado la migración de EF para saber si presenta problemas similares, pero los bits Arriba / Abajo parecen bastante útiles.
entity-framework
Benjol
fuente
fuente
Respuestas:
Déjame ponerlo en otro punto de vista. El mantenimiento de la base de datos de Entity Framework es completamente inútil en cualquier proyecto de base de datos empresarial o grande.
Los problemas son:
Actualizaciones automáticas de esquemas. Esto no es absolutamente lo que quiero, ya que viola totalmente los fundamentos del mantenimiento de la base de datos. Los problemas son: (a) alguien que ejecuta una versión más nueva actualiza la base de datos en lugar de obtener un problema y (b) las actualizaciones se programan con el dba normalmente haciendo una copia de seguridad PRIMERO. Por lo tanto, las actualizaciones automáticas son inútiles.
La creación de Db solo funciona en casos extremos básicamente degenerados. Ni siquiera intente utilizar funciones avanzadas de la base de datos, independientemente de cuál. Ejemplo de servidor SQL: campos incluidos en índices, filtros en índices, particionamiento, compresión, reglas de validación para campos.
Migración: asume nuevamente los casos extremos degenerados: sin transformación de datos o actualización de varios pasos fácilmente. Ejemplo: la Tabla X tiene un campo histórico de "usuario" que registra que el usuario hace algo. La nueva configuración tiene una tabla de usuario, por lo que es necesario crear la tabla de usuario, luego crear los usuarios, luego crear el campo de referencia del usuario en la tabla x, luego actualizar esto con el usuario que es de la tabla de usuarios, luego eliminar el campo de usuario.
La única forma sensata de lidiar con estos escenarios son los scripts de generación y migración y las versiones adecuadas.
Ahora, SSDT, que es una gran herramienta para versionar una versión de base de datos específica mucho mejor que Entity Framework porque realmente funciona. Como en: registra todas las características. En ninguna de las bases de datos que tengo, podría usar el código primero, porque siempre tenemos índices filtrados al menos;) EF ni siquiera me llevaría al 10% de lo que necesito.
Nuestro enfoque es:
Diseñe la base de datos en la base de datos, luego sincronícela con un módulo SSDT que se registre. La sincronización de esquema permite a los desarrolladores actualizar su versión rápidamente. Siempre hay una base de datos maestra autorizada con la versión actual en algún lugar (en un servidor especial), por lo que tenemos una versión de referencia para trabajar.
Genere scripts delta según sea necesario para las versiones que también se versionen y tengan un buen mecanismo para implementarlas en una base de datos.
fuente
Hay más de una forma de usar EF con una base de datos de SQL Server.
EF no necesariamente hará todo el trabajo por usted. EF te llevará alrededor del 80 al 95 por ciento allí. El otro 5 a 20 por ciento de su esfuerzo de desarrollo de bases de datos se complementará con optimizaciones como Vistas y Procedimientos almacenados.
Entonces no, no son ortogonales. Pero tendrá que decidir cuál será su estrategia general de diseño, y luego confiar en herramientas como SSDT para ayudarlo a optimizar aquellas partes donde EF produce resultados menos que ideales.
fuente