实体框架代码优先:如何使用嵌套对象将平面表映射到类

Pat*_*ins 9 c# entity-framework .net-4.0 entity-framework-4.3

我有一个场景,其中来自单个表的数据必须在2个对象中.

[Table]
-Field1
-Field2
-Field3
-Field4
Run Code Online (Sandbox Code Playgroud)

课程看起来像这样:

[Class1]
-Field1
-Field2
-Class2 object here

[Class2]
-Field3
-Field4
Run Code Online (Sandbox Code Playgroud)

我已经在Class1中为Class2的属性设置了属性[NotMapped],该属性包含字段3和4.我还在数据库上下文中添加了配置:

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

问题是,当我尝试将Entity Framework与Class1一起使用时:

属性"Class2"不是"Class2"类型的声明属性.使用Ignore方法或NotMappedAttribute数据批注验证是否未从模型中显式排除该属性.确保它是有效的原始属性.

如何将Entity Framework Code First与具有嵌套对象且具有平面表中所有信息的实体一起使用?

Ant*_*n L 9

只有在EF CF可以将Class2识别为复杂类型的情况下,才能这样做.

简述:

  1. Class2不应包含对其他EF实体的任何引用.仅适用于其他复杂类型或标准类型
  2. Class2不能是通用的.在这种情况下,作为一种解决方法,您可以创建一个非通用嵌套类并在Class1中使用它.