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 → Foo

Entidad 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?

¿Fue útil?

Solución

Aquí hay una lista de verificación de cosas a buscar:

  1. Su Modelo de almacenamiento debería tener:
    1. Dos EntitySets: Foo y FooView
    2. Dos EntityTypes: Foo y FooView
  2. Su Modelo conceptual debería tener:
    1. Dos EntitySets: Foo y FooView - ambas cosas con un EntityType ajustado a ModelName.Foo
    2. Una EntityType: Foo
  3. Su Cartografía debería tener dos EntitySetMappings:
    1. Foo con uno EntityTypeMapping ("ModelName.foo") con uno MappingFragment ("Foo")
    2. FooView con uno EntityTypeMapping ("Nombre del modelo.Foo") con uno MappingFragment ("Fooview")

Debería poder ejecutar lo siguiente:

Foo foo = new ModelEntities()
    .CreateObjectSet<Foo>("FooView")
    .First();

Puedes darte un directo haciendo lo siguiente:

  1. Agregar Foo y FooView a tu modelo
  2. En el Mapping Details de Foo hacer clic Add a Table or View y seleccionar FooView
  3. Borrar FooView De tu modelo
  4. Guardar el modelo y abrirlo en el editor XML
  5. (pre-rtm) Encontrar <EntityType Name="FooView"> en <StorageModels> y eliminar las entradas incorrectas de <Key> (debería coincidir <EntityType Name="Foo">)
  6. 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:

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top