c# - studio - linq to sql vs entity framework
La mejor forma de actualizar las clases de LINQ a SQL después de cambiar el esquema de la base de datos (7)
Estoy usando clases de LINQ a SQL en un proyecto donde el diseño de la base de datos todavía está en un poco de flujo.
¿Hay una manera fácil de sincronizar las clases con el esquema, o necesito actualizar las clases manualmente si un diseño de tabla cambia?
¿Qué hay de la modificación de las Propiedades de la entidad / tabla dentro de la superficie de diseño de DataContext dentro de Visual Studio?
Por ejemplo, si agregué una columna a una tabla de SQL Server:
- Abra el archivo * .dbml.
- Haga clic con el botón derecho en la entidad y seleccione Agregar> Propiedad.
- Complete los valores en la ventana de Propiedades para la nueva columna.
- Construye tu solución.
Las clases de modelo generadas automáticamente deben reflejar la nueva columna que se agregó.
Aquí hay una solución fácil sin ningún software adicional, que solo funciona para cambios simples (como campos agregados, pocas tablas, etc.).
Instrucciones:
- Tira de una copia de la tabla modificada al diseñador (se eliminará más adelante)
- Ahora seleccione todos los campos nuevos (o modificados) y (
right-click ->
)copy
- En la tabla original, haga clic con el botón derecho e
insert
(primero elimine los campos modificados) - Ahora borre la tabla desde la que los copió
Sé que es algo obvio, pero de alguna manera no intuitivo, y me ayudó mucho, ya que se copiarán todos los atributos y tipos correctos, y todos los enlaces se mantendrán intactos. Espero eso ayude.
Cuándo usar:
Por supuesto, como se dijo, para pequeños cambios, pero seguramente es mejor que reemplazar manualmente tablas con muchos enlaces, o cuando no quiere que SQLMetal genere toda su estructura de base de datos. Por ejemplo, cuando tiene una gran cantidad de tablas (por ejemplo, SAP) o cuando usa tablas entrecruzadas de diferentes bases de datos.
Creo que Jeff se quejó de esto recientemente. Una técnica común es arrastrar todos los objetos al diseñador de nuevo ...
¡Espero que alguien más responda con un mejor enfoque!
DamienG ha escrito algunas plantillas t4 que pueden reemplazar parte de lo que VS genera para usted. Estos se pueden volver a ejecutar siempre que lo desee a través de una herramienta de línea de comandos.
Las plantillas T4 tienen el beneficio adicional de ser editables. Esto le permite ajustar lo que se genera para el contenido de su corazón.
Escribí una herramienta para hacer cambios de scripts en los scripts de Dbml, consulte http://code.google.com/p/linqtodbmlrunner/ y mi blog http://www.adverseconditionals.com
No lo he probado yo mismo, pero otras personas recomiendan las herramientas DBML / EDMX de Huagati .
Huagati DBML / EDMX Tools es un complemento para Visual Studio que agrega funcionalidad al diseñador de diagramas Linq2SQL / DBML en Visual Studio 2008 y al diseñador de ADO.NET Entity Framework en Visual Studio 2008 SP1. El complemento agrega nuevas opciones de menú para actualizar diagramas de diseñador Linq2SQL con cambios en la base de datos, para cambiar el nombre de las clases y propiedades Linq-to-SQL (DBML) y EF (EDMX) para usar convenciones de nomenclatura .net y para agregar documentación / descripciones a Linq a las clases generadas por SQL a partir de las propiedades de la base de datos.
Puede usar SQLMetal.exe para generar su archivo dbml y / o cs / vb. Utilice un script precompilado para iniciarlo y diríjase al directorio al que pertenece su proyecto de contexto de datos.
C:/Program Files/Microsoft SDKs/Windows/v6.0A/Bin/x64/sqlmetal.exe
/server:<SERVER>
/database:<database>
/code:"path/Solution/DataContextProject/dbContext.cs"
/language:csharp
/namespace:<your namespace>