2012-02-07 16 views
5

Estoy buscando la solución al problema que tengo y probablemente muchos deben enfrentar.Comparta un modelo entre múltiples archivos de edmx (Entity Framework 4.0)

Curently estoy trabajando en una aplicación que contiene casi 400 tablas. La aplicación consta de siete proyectos de biblioteca de clase (StudentInfo, biblioteca, tarifas, etc.) y cada uno tiene su propio archivo .edmx (que consta de 50 tablas) con generación de código strategy = default Y un único proyecto de aplicación web que hace referencia a los proyectos de biblioteca de clase .
Hay alrededor de 15 tablas que son comunes y estarán presentes en el archivo .edmx en cada proyecto de biblioteca de clase. El espacio de nombres de las clases/modelos es el mismo (Campus) en todos los archivos .edmx.

He creado una clase parcial llamada School (que es una de la tabla/modelo commom) que contiene algunos métodos.

Sin embargo se lanza el siguiente error en tiempo de compilación El tipo existe 'Campus.School' tanto 'D: \ proyecto \ Campus \ CampusStudent \' y 'D: \ proyecto \ Campus \ CampusLibrary \ bin \ Debug \ CampusLibrary.dll '

Las soluciones que fueron sugeridas por otros miembros
1) Tienen espacios de nombres separados para cada uno de los archivos .edmx.
2) Use nombres diferentes para los modelos, es decir, StudentSchool, LibrarySchool, etc.
Ambas soluciones me obligarán a duplicar las clases comunes con sus métodos en cada uno de los proyectos de la biblioteca de clase. ¿Alguien puede ayudarme?

+0

Supongo que surge la pregunta de si realmente necesita esas 15 tablas presentes en todos los archivos de edmx. ¿No puedes dividir los modelos lógicamente para eliminar la redundancia? –

Respuesta

6

Puede haber una manera si está utilizando la plantilla POCO T4 para la generación de entidad actual. Las POCO en EF pueden ser cualquier clase en cualquier espacio de nombres que tenga el mismo nombre que la entidad en su EDMX y que tengan todas las propiedades con el mismo nombre que la entidad en EDMX (incluidos los mismos tipos y accesibilidades para captadores y establecedores).

Define tus 15 clases compartidas en otro ensamblado (debes seguir las mencionadas reglas de POCO) y haz referencia de todos los proyectos de la biblioteca. Una vez que tenga este ensamblado, cree su propia versión de la plantilla POCO T4 que no creará nuevos archivos de clase para esas entidades compartidas y en su lugar usará clases del ensamblaje al que se hace referencia.

La otra opción es la creación y mantenimiento manual de todas esas 400 clases y tipos de contexto EF. Eso es lo que harás si usas solo el mapeo de código (también conocido como código primero) y no tendrás estos problemas.

+0

Gracias por su respuesta. Intentaré implementarlo. –

+0

Estimado Ladislav: ¿Tiene una aplicación de muestra o un enlace a un recurso que puede ayudarme a implementarlo? En realidad, no puedo aplicar su sugerencia para crear la plantilla ** de POCO T4 que no creará nuevos archivos de clase para esas entidades compartidas y en su lugar use clases del ensamblado al que se hace referencia ** ya que no soy muy competente en EF –

+0

Lo siento, no tengo un ejemplo. Solo necesita crear una colección fija de nombres de entidades estáticos que no se deben crear. Esta colección se definirá directamente en la plantilla. En la parte de la plantilla que genera el código para las entidades, valide que el nombre de la entidad no está presente en la colección. También necesitará modificar el código para generar propiedades de navegación en otras entidades para usar el tipo correcto a partir del ensamblaje al que se hace referencia. –

Cuestiones relacionadas