Entity Framework Code First: Как отобразить плоский стол на класс с вложенными объектами

c# entity-framework .net-4.0 entity-framework-4.3

4356 просмотра

1 ответ

У меня есть сценарий, где данные из одной таблицы должны быть в 2 объекта.

[Table]
-Field1
-Field2
-Field3
-Field4

И класс выглядит так:

[Class1]
-Field1
-Field2
-Class2 object here

[Class2]
-Field3
-Field4

Я установил в Class1 атрибут [NotMapped] над свойством Class2, которое содержит поля 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 не является объявленным свойством для типа Class2. Убедитесь, что свойство не было явно исключено из модели с помощью метода Ignore или аннотации данных NotMappedAttribute. Убедитесь, что это допустимое примитивное свойство.

Как я могу использовать Entity Framework Code First с сущностью, у которой есть вложенный объект со всей информацией в плоской таблице?

Автор: Patrick Desjardins Источник Размещён: 06.07.2019 09:27

Ответы (1)


8 плюса

Решение

Вы можете сделать это только в том случае, если EF CF может распознать Class2 как сложный тип .

Кратко:

  1. Class2 не должен содержать ссылок на другие объекты EF. Только для других сложных типов или стандартных типов
  2. Class2 не может быть универсальным. в этом случае в качестве обходного пути вы можете создать неуниверсальный вложенный класс и использовать его в своем Class1.
Автор: Anton L Размещён: 13.06.2012 04:02
Вопросы из категории :
32x32