2012-09-11 7 views
21

En VS 2010 y EF 4.4, usted podía mover y editar archivos .tt cuando usaba el generador DBContext en Entity Framework de modo que sus objetos POCO estaban en un proyecto diferente que tus archivos DBContext.Entity Framework 5 y Visual Studio 2012 POCO Classes en Proyecto diferente

Ver Here y Here para ver ejemplos de lo que estoy hablando.

En VS2012/EF5 esto no parece posible. las clases POCO se generan como un subelemento bajo el archivo EDMX. Los archivos no se pueden copiar desde Visual Studio. Mover los archivos desde Explorer no ayuda porque los archivos que movió se vuelven a crear en tiempo de compilación.

¿Me falta algo básico aquí?

No estoy usando ningún elemento de generación de código con EF5 (mientras que yo estaba con EF4.x.) ¿Podría ser esa la diferencia?

Respuesta

64

En Visual Studio 2012, cuando agrega un Modelo de datos de entidad ADO.NET (* .edmx), incluye las plantillas T4 para el contexto y las clases de modelo como subelementos del archivo EDMX. Por ejemplo, si se agrega MyModel.edmx, que tendrá 4 subtemas de la siguiente manera:

  1. MyModel.Context.tt
  2. MyModel.Designer.cs (en proyectos de C#)
  3. MyModel.edmx .diagram
  4. MyModel.tt

MyModel.tt genera las entidades POCO como subtemas. Para generar las entidades en un proyecto separado, siga los siguientes pasos:

  1. Cree un proyecto de clase separado.
  2. Agregue el nuevo artículo, elija la plantilla "EF 5.x DbContext Generator". Esto crea el archivo * .tt. Por ejemplo MyModel.tt.
  3. Editar el archivo de plantilla de la siguiente manera:

    const string inputFile = @"MyModel.edmx"; // old value (remove) 
    const string inputFile = @"..\MyOtherProjectName\MyModel.edmx"; // new value 
    
  4. En su otro proyecto, expanda el archivo EDMX y haga clic derecho en MyModel.tt, seleccione Eliminar.

Eso es todo. Ya terminaste Ahora tiene su modelo y contexto en un proyecto y las entidades en un proyecto separado.

+4

La mejor respuesta, que resolvió mi El mayor problema! –

+1

Awasome respuesta, gracias. –

+1

Muy impresionante, tuve la misma pregunta. –

2

Entonces, TIENE que moverlo a través de Windows Explorer ahora. Y luego edite la ruta al archivo EDMX en el archivo .tt que movió. Una vez que lo haces, funciona. (Sé que digo que no está arriba, pero debo haber hecho algo mal la primera vez que lo intenté).

6

revisa el siguiente mensaje: Visual Studio 2012 - Can't move EF .tt files

Habla de cómo puede quitar la información de dependencia del archivo .tt al archivo dentro del archivo .edmx .csproj assoicated. Esto le permitirá arrastrar el archivo .tt desde el Explorador de soluciones.

Solo asegúrese de actualizar la ruta del archivo en el comienzo del archivo .tt para que apunte a.edmx como se describe en la respuesta anterior y se muestra a continuación:

const string inputFile = @"..\EFTest\EFTestModel.edmx"; 

Hay varias piezas y los pasos reales y falta cualquier uno solo se puede evitar la separación de las clases POCO funcione correctamente. He creado un blog que detalla todo el proceso que se puede ver a continuación:

Separación de entidades Clases Marco POCO genera a partir de la plantilla T4 en VS.NET 2012:
http://allen-conway-dotnet.blogspot.com/2013/01/separating-entity-framework-poco.html

+0

Tuve un problema similar, aunque también tuve que editar algunas de las entradas en el archivo del proyecto. Ver: http://stackoverflow.com/questions/12200258/visual-studio-2012-cant-move-ef-tt-files/16216001#16216001 – GrandMasterFlush

+0

+1 para el enlace. Explicación impresionante –

Cuestiones relacionadas