2009-10-05 8 views
11

Comencé a desarrollar una aplicación utilizando Entity Framework.Cómo admitir modelos de múltiples entidades marco en la misma solución

He agregado un espacio de nombres para contener todo mi código de administración de usuarios MyApp.Users por ejemplo, y este contiene un modelo que ha sido marcado como interno del espacio de nombres y solo expone la funcionalidad al resto del sistema a través de interfaces. Esto está todo bien.

Ahora deseo definir otro espacio de nombres para manejar la lógica comercial específica. Quiero que contenga un modelo que solo conozca otro subconjunto del esquema de la base de datos; sin embargo, este subconjunto se solapa en la tabla Usuarios. Cuando intento acceder al segundo modelo en el proyecto principal, me sale este error:

"Un EdmType no se puede asignar a clases CLR varias veces"

Siento que esto no debe comportarse de esta manera. Después de todo, dos modelos diferentes en 2 espacios de nombres diferentes hacen referencia a la tabla de usuarios ... ¿cómo sabe siquiera VS que la tabla está siendo referenciada dos veces?

¿Alguien ha visto este problema y tal vez descubrió cómo permitir que exista la misma tabla en diferentes modelos?

Alternativamente - ¿Esto representa algún tipo de Entity Framework Anti-Pattern que debería evitar?

Respuesta

8

Con el fin de reutilizar en múltiples tipos de modelos, es necesario seguir algunos specific steps outlined in this blog post. Como muchas funciones más avanzadas de Entity Framework, esto funciona, pero no funciona tan bien con el diseñador de GUI. Consulte también this intro post para obtener más ideas sobre cómo lidiar con modelos más grandes.

+2

El enlace a la publicación del blog está roto –

4

Definitivamente puede tener varios modelos, pero no pueden superponerse. El mensaje de error es bastante claro: si se superponen, ¿cómo sabría EF qué tipo de CLR asignar? No hay forma de saberlo, realmente.

En su caso, podría intentar extraer la tabla Users en un tercer modelo propio, si es necesario utilizarla en otros dos lugares también.

Marc

Cuestiones relacionadas