2012-06-13 10 views
6

Tengo el escenario donde los datos de una sola tabla deben estar en 2 objetos.Código Entity Framework Primero: Cómo asignar tabla plana a clase con objetos anidados

[Table] 
-Field1 
-Field2 
-Field3 
-Field4 

Y la mirada clase como esta:

[Class1] 
-Field1 
-Field2 
-Class2 object here 

[Class2] 
-Field3 
-Field4 

he puesto en la Clase 1 el atributo [NotMapped] sobre la propiedad de la Clase 2, que contiene el campo 3 y 4. También he añadido la configuración en el contexto de la base:

public class ConfigurationClass1 : EntityTypeConfiguration<Class1> { 
    public ConfigurationClass1() { 
     Property(o => o.Class2.Field3).HasColumnName("Field3"); 
     Property(o => o.Class2.Field4).HasColumnName("Field4"); 
    } 
} 

el problema es que cuando trato de utilizar Marco de la entidad con la Clase 1 que tengo:

La propiedad 'Clase 2' no es una propiedad declarada en el tipo 'Clase 2'. Compruebe que la propiedad no se haya excluido explícitamente del modelo utilizando el método Ignorar o la anotación de datos NotMappedAttribute. Asegúrese de que sea una propiedad primitiva válida.

¿Cómo puedo usar el código Entity Framework First con una entidad que tiene un objeto anidado con toda la información en una tabla plana?

Respuesta

7

Puede hacer esto solo en caso de que la Clase 2 pueda ser reconocida por EF CF como Complex type.

Brevemente:

  1. Class2 no debe contener referencias a otras entidades EF. Solo para otros tipos complejos o tipos estándar
  2. La clase 2 no puede ser genérica. En este caso, como solución alternativa puede crear una clase anidada no genérica y usarla en su Class1.
+0

Parece un montón de problemas por lo que es un problema simple. –

+0

@Chuck Conway está de acuerdo, pero así es como funciona en EF –

+0

Me había olvidado por completo de ComplexType. Una vez que lo configuré con el atributo ComplexType, todo funcionó. Gracias. +1 y aceptado :) –

Cuestiones relacionadas