2012-06-13 11 views
6

Mam scenariusz, w którym dane z pojedynczej tabeli muszą znajdować się w 2 obiektach.Kod struktury obiektu Najpierw: Jak odwzorować tabelę płaską na klasę z obiektami zagnieżdżonymi

[Table] 
-Field1 
-Field2 
-Field3 
-Field4 

i klasy wyglądać następująco:

[Class1] 
-Field1 
-Field2 
-Class2 object here 

[Class2] 
-Field3 
-Field4 

Po ustawieniu w klas 1 atrybut [NotMapped] na własność Class2 zawierających pole 3 i 4. Również dodanego konfiguracja w kontekście danych:

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

problem polega na tym, że gdy próbuję użyć Entity Framework z Class1 mam:

Właściwość "Class2" nie jest zadeklarowaną własnością typu "Class2". Sprawdź, czy właściwość nie została jawnie wykluczona z modelu przy użyciu adnotacji Ignore method lub NotMappedAttribute . Upewnij się, że jest to prawidłowa prymitywna właściwość.

Jak mogę użyć Entity Framework Code First z Entity, który ma zagnieżdżony obiekt ze wszystkimi informacjami w płaskim stole?

Odpowiedz

7

Można to zrobić tylko w przypadku, gdy klasa 2 może zostać rozpoznana przez EF CF jako Complex type.

skrócie:

  1. Class2 nie powinny zawierać żadnych odniesień do innych podmiotów EF. Tylko do innych typów złożonych lub typów standardowych
  2. Klasa 2 nie może być ogólna. w tym przypadku jako obejście możesz utworzyć nie-rodzajową klasę zagnieżdżoną i użyć jej w klasie 1.
+0

Wydaje się, że wiele problemów jest prostym problemem. –

+0

@Chuck Conway zgadzam się, ale tak to działa w EF –

+0

Całkowicie zapomniałem o ComplexType. Po skonfigurowaniu z atrybutem ComplexType wszystko działało. Dziękuję Ci. +1 i akceptowane :) –

Powiązane problemy