Entity Framework Code First:如何将扁平表映射到具有嵌套对象的类?

13

我有一个情景,需要从一张表中获取数据并将其拆分为两个对象。

[Table]
-Field1
-Field2
-Field3
-Field4

而这个类看起来像这样:

[Class1]
-Field1
-Field2
-Class2 object here

[Class2]
-Field3
-Field4

我已在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");
    }
}

问题是当我尝试使用Entity Framework与Class1一起使用时,我收到了以下错误信息:

'Class2'属性不是'type 'Class2'上声明的属性。 请通过使用Ignore方法或NotMappedAttribute数据注释验证该属性未被显式排除 模型。确保它是一个有效的基元属性。

如何在具有所有信息的嵌套对象的实体中使用Entity Framework Code First,并将其存储在平面表中?

1个回答

11

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

简而言之:

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

似乎为一个简单的问题而大费周折。 - Chuck Conway
我完全忘记了ComplexType。一旦我用ComplexType属性设置它,一切都正常了。谢谢。+1并接受 :) - Patrick Desjardins

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接