Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Entity Framework Code First : How to map flat table to class with nested objects

I have the scenario where the data from a single table must be in 2 objects.

[Table]
-Field1
-Field2
-Field3
-Field4

And the class look like this:

[Class1]
-Field1
-Field2
-Class2 object here

[Class2]
-Field3
-Field4

I have set in the Class1 the attribute [NotMapped] over the property of the Class2 which contain the field 3 and 4. I also have added the configuration in the Database Context:

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

The problem is that when I try to use Entity Framework with the Class1 I got :

The property 'Class2' is not a declared property on type 'Class2'. Verify that the property has not been explicitly excluded from the model by using the Ignore method or NotMappedAttribute data annotation. Make sure that it is a valid primitive property.

How can I use Entity Framework Code First with an Entity that has nested object with all the information in a flat table?

like image 323
Patrick Desjardins Avatar asked Jun 13 '12 15:06

Patrick Desjardins


1 Answers

You can do like this only in case Class2 can be recognized by EF CF as a Complex type.

Briefly:

  1. Class2 shouldn't contain any references to other EF Entities. Only to other Complex types or standard types
  2. Class2 can't be generic. in this case as a workaround you can create a non-generic nested class and use it in your Class1.
like image 187
Anton L Avatar answered Sep 29 '22 13:09

Anton L