2012-08-30 31 views
14

Noté en VS2012 que cuando crea un nuevo modelo EF (.edmx) que el DbContext es la generación de código predeterminada y los archivos .tt (plantilla T4) son ahora anidado debajo de el archivo .edmx en el Explorador de soluciones.Visual Studio 2012 - No se puede mover archivos EF .tt

Pregunta:¿Hay alguna manera de mover estos archivos .tt a otra carpeta o proyecto? Cuando intento arrastrar y soltar en el Explorador de soluciones, no me permitirá mover el archivo .tt anidado.

Detalles del problema: Anteriormente (en VS2010) que utiliza para mover el archivo de uno .tt para mis POCOs en una biblioteca de clases llamadas DataDefinitions y yo fui el otro archivo .tt para mi contexto en una biblioteca de clases llamado DataAccess. Ahora parece que no podré mover estos archivos ... y separar mis activos en diferentes capas.

En este artículo de MSDN, si se desplaza a la parte inferior, se puede ver una imagen de cómo los archivos .tt están anidados ... http://msdn.microsoft.com/en-us/data/jj613116

Respuesta

23

Es algún rasgo nuevo y extraño, donde se añaden las plantillas como dependencia al archivo EDMX. Puede solucionarlo editando el archivo .csproj para su proyecto (puede hacerlo en el bloc de notas o descargar el proyecto en VS y editarlo). Va a encontrar algo como esto:

<None Include="Model.tt"> 
    <Generator>TextTemplatingFileGenerator</Generator> 
    <DependentUpon>Model.edmx</DependentUpon> 
    <LastGenOutput>Model.cs</LastGenOutput> 
</None> 

sólo tiene que quitar DependentUpon elemento y el elemento de la plantilla pasará a formar parte independiente del proyecto.

+0

Esta respuesta funcionó para mí, ¡gracias! Por cierto, decidí aceptar lo que los desarrolladores de MS tienen en mente y mantener todo mi código EF en una capa. Siento que es un poco complicado tener objetos de datos y código de acceso a datos en la misma biblioteca de clases, pero tampoco quiero tener que luchar contra Visual Studio para "corregir" los archivos generados todo el tiempo. – ClearCloud8

+1

Voy a seguir adelante y editar el archivo .csproj. gracias @Ladislav – vijiboy

+2

Odio que vayas a cambiar tu arquitectura adecuada para acomodar la configuración cutre de microsoft. No tengo idea de por qué Microsoft está poniendo las entidades y la capa de acceso a datos (contextos) en el mismo proyecto. Si esto no se puede arreglar fácilmente, su código de interfaz de usuario tendría que hacer referencia a su DAL directo en lugar de pasar por el BLL y esto realmente infringe la arquitectura N de nivel adecuada, en mi opinión. La IU no debe tener acceso directo al DAL sin pasar por el BLL para garantizar que se procesen las reglas comerciales correctas. – Matt

2

Estoy utilizando EF5.x un DBContext en un proyecto separado para el modelo de datos de EF. A pesar de eliminar la entrada DependentUpon en el archivo de proyecto según lo indicado por Ladislav y here, las clases seguían apareciendo en mi archivo Model1.tt.

Para evitar esto, tuve que quitar también parte de las entradas del archivo de proyecto para cada una de las mesas:

<Compile Include="MyTableName.cs"> 
    <DependentUpon>Model1.tt</DependentUpon> 
</Compile> 

Sólo las líneas con las <DependentUpon> etiquetas deben ser retiradas mientras los <Compile Include="..."> etiquetas deben estar mantenido. Al eliminar toda la entrada, el archivo desaparecerá de la lista de proyectos. Las entradas se pueden acortar a <Compile Include="MyTableName.cs"\> para abreviar.

0

En lugar de editar archivos de proyecto, agrego un modelo EF del mismo nombre al proyecto, cierro la solución, copio los archivos del modelo del otro proyecto y vuelvo a abrir la solución. Cambio el espacio de nombre en las propiedades de edmx y luego vuelvo a compilar el modelo.

Cuestiones relacionadas