11

Estoy comenzando una nueva aplicación que debe usar una base de datos existente que usa algunas convenciones de nombres que son realmente molestas en .net (los nombres de las tablas comienzan con varios trigramas que especifican el dominio comercial del tabla, los nombres de columna comienzan con el trigrama de tablas, los trigramas están en mayúsculas y separados por guiones bajos, etc.).Cambiar nombres de entidades y propiedades en la base de datos Primero

Lo que me gustaría hacer es escribir una regla de cambio de nombre simple (esto es tan simple como encontrar el último guión bajo y tomar todo después de eso) y aplicarlo en Entity Framework. Realmente no quiero editar los nombres uno por uno en el editor, especialmente porque la base de datos podría cambiar y no quiero hacerlo varias veces.

Estoy utilizando Database First (ya que la base de datos ya existe y es "el maestro"), y EF 4.x DbContext Generator y funciona realmente bien fuera de la caja (con clases y propiedades mal nombradas) .

He editado las plantillas T4 para cambiar el nombre de las entidades y propiedades generadas, pero cuando intento realizar cualquier solicitud, el objeto DbContext no puede encontrar la tabla que coincide con la entidad que intento solicitar y obtenga esta excepción:

El tipo de entidad [Nombre de la entidad] no es parte del modelo para el contexto actual .

Esto es obvio por qué no encuentra la tabla: nada dice cómo hacer coincidir el nombre de la entidad y la tabla como lo cambié sobre la marcha. He leído que puedo agregar instrucciones en el método OnModelCreating(DbModelBuilder modelBuilder), pero esto no se usa en Database First (y la plantilla T4 predeterminada agrega una excepción, por las dudas).

Así que ahora estoy atascado, no sé cómo especificar esa coincidencia.

Aquí hay varias ideas que tengo, pero no estoy seguro si es correcta o factible:

  • Uso de la API "plural/singular" para cambiar el nombre de la entidad? Suena como una solución sucia. Pero podría funcionar (aunque no lo intenté).
  • Encontrando una manera de editar el archivo EDMX sobre la marcha.
  • Editar el EDMX posteriormente pero puede complicar el proceso (edite en el diseñador, luego ejecute una herramienta para modificar el EDMX, luego ejecute una herramienta personalizada para regenerar entidades y DbContext ... mientras que hoy solo tengo que editar en el diseñador)
  • Usando Code First (ya que parece más fácil usar nombres de entidades diferentes que nombres de tabla, a través de atributos o instrucciones en la clase DbContext), pero parece que no sería más complicado usarlo con una base de datos existente.

¿Alguna idea? ¿O me perdí algo?

Respuesta

7

No podrá usar una transformación T4 para esto, ya que quiere cambiar el contenido del archivo .edmx real para mapear los nombres de las entidades de su tienda (con los desagradables prefijos) a sus nombres de entidades conceptuales sanitizadas.

En su lugar, es mejor escribir una aplicación que toma un archivo .edmx como entrada y desinfecta los nombres bajo la etiqueta de modelo conceptual y modifica los nombres de la asignación para reflejar los nombres desinfectados. Entiendo que esta es su tercera opción y que desea evitar esto si es posible, pero esta es la forma más directa de hacerlo.Tenga en cuenta que solo tendrá que ejecutar esta herramienta cuando agregue nuevas tablas o columnas.

+2

Tenía miedo de obtener esa respuesta :). Esperaba que me perdiera algo. Parece que alguien ya ha hecho esa herramienta: http://blog.cincura.net/228749-making-names-of-entities-or-any-identifiers-in-entity-framework-model-code-and-developer-friendly -no-mayúscula / –

Cuestiones relacionadas