2012-06-13 10 views
6

Ho lo scenario in cui i dati di una singola tabella devono essere in 2 oggetti.Codice quadro entità Primo: come mappare la tabella piatta in classe con oggetti nidificati

[Table] 
-Field1 
-Field2 
-Field3 
-Field4 

E l'aspetto classe come questa:

[Class1] 
-Field1 
-Field2 
-Class2 object here 

[Class2] 
-Field3 
-Field4 

ho impostato nel Class1 l'attributo [notmapped] sulla proprietà del Class2 che contengono il campo 3 e 4. Ho anche aggiunto la configurazione nel contesto di database:

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

il problema è che quando cerco di utilizzare Entity Framework con il Class1 ho ottenuto:

La proprietà "Classe2" non è una proprietà dichiarata sul tipo "Classe2". Verificare che la proprietà non sia stata esclusa esplicitamente dal modello utilizzando il metodo Ignora o l'annotazione di dati NotMappedAttribute. Assicurarsi che sia una proprietà primitiva valida.

Come è possibile utilizzare il codice Entity Framework Innanzitutto con un'entità che ha un oggetto nidificato con tutte le informazioni in una tabella piatta?

risposta

7

È possibile eseguire questa operazione solo nel caso in cui Class2 possa essere riconosciuto da EF CF come Complex type.

In breve:

  1. Class2 non deve contenere riferimenti ad altre entità EF. Solo per altri tipi complessi o tipi standard
  2. Class2 non può essere generico. in questo caso, come soluzione alternativa, è possibile creare una classe nidificata non generica e utilizzarla in Class1.
+0

Sembra un sacco di problemi per quello che è un problema semplice. –

+0

@Chuck Conway sono d'accordo, ma questo è il modo in cui funziona in EF –

+0

Mi sono completamente dimenticato di ComplexType. Una volta configurato con l'attributo ComplexType, tutto ha funzionato. Grazie. +1 e accettato :) –

Problemi correlati