Entity Framework V4 -> Necesita ayuda con Poco y entidades
Pregunta
Estoy usando EF4 y tengo dos entidades que deseo asignar al mismo POCO
. No estoy seguro de cómo puedo hacer esto.
Entidad 1 → foo (esto representa una tabla foo en el db)
Poco → FooEntidad 2 → fooview (esto representa una vista fooview en el db)
Poco → Foo
Entiendo que necesito hacer algo como
IObjectSet<Foo> _foos = CreateObjectSet<Foo>();
// Note spelling of the Entity.
IObjectSet<Foo> _foosView = CreateObjectSet<Foo>("FooViews");
Pero cuando intento esto, se compila, pero falla con la siguiente excepción:
System.argumentException: System.ArGumentException: el tipo de entidad especificado, 'myProject.core.foo', no coincide con el tipo 'EntityFramework.SqlServerModel.fooSView' de la entidad 'FoosViews'.
¿Alguna sugerencia?
Solución
- Cómo: Definir un modelo con múltiples conjuntos de entidades por tipo
- Cómo: Agregar un objeto a un conjunto de entidades específico
Aquí hay una lista de verificación de cosas a buscar:
- Su Modelo de almacenamiento debería tener:
- Dos
EntitySets
:Foo
yFooView
- Dos
EntityTypes
:Foo
yFooView
- Dos
- Su Modelo conceptual debería tener:
- Dos
EntitySets
:Foo
yFooView
- ambas cosas con unEntityType
ajustado aModelName.Foo
- Una
EntityType
:Foo
- Dos
- Su Cartografía debería tener dos
EntitySetMappings
:Foo
con unoEntityTypeMapping
("ModelName.foo") con unoMappingFragment
("Foo")FooView
con unoEntityTypeMapping
("Nombre del modelo.Foo") con unoMappingFragment
("Fooview")
Debería poder ejecutar lo siguiente:
Foo foo = new ModelEntities()
.CreateObjectSet<Foo>("FooView")
.First();
Puedes darte un directo haciendo lo siguiente:
- Agregar
Foo
yFooView
a tu modelo - En el
Mapping Details
deFoo
hacer clicAdd a Table or View
y seleccionarFooView
- Borrar
FooView
De tu modelo - Guardar el modelo y abrirlo en el editor XML
- (pre-rtm) Encontrar
<EntityType Name="FooView">
en<StorageModels>
y eliminar las entradas incorrectas de<Key>
(debería coincidir<EntityType Name="Foo">
) - Quitar el
<EntityTypeMapping Name="IsTypeOf(Foo)" />
y<EntityTypeMapping Name="IsTypeOf(FooView)" />
(me causaron errores)
A partir de Beta 2, la implementación de lo anterior romperá al diseñador
Otros consejos
En nHibernate, uno debe resolver esto utilizando proyecciones. Entonces, creo que debe existir algo similar en el marco de la entidad. He buscado en Google un poco y vine a este: