2016-09-30 4 views
0

Я использую Entity Framework для моего приложения C#.EntityFramework - Сохранение совокупности корней, которые содержат объекты

Я близок к его полной реализации, но я немного смущен свободным API.

Обзор моих классов (упрощенных)

class Customer : IEntity { 
    public Id { get; set; } 
    public Name Name { get; set; }; 

    public Customer() {} 

    public Customer(Name name){ 
     this.name = name; 
    } 
} 


class Name { 
    public String Title; 
    public String Forename; 
    public String Surname; 

    public Name(){} 

    public Name(String Title, String Forename, String Surname){ 
     // assign values 
    } 
} 

спасбросков с рамки сущности, кажется, работает хорошо; нет никаких исключений, по крайней мере. Однако, когда я пытаюсь заставить всех клиентов использовать DbContext.getAll(), он выдает исключение NullReferenceException при попытке распечатать customer.Name.Forename в окне вывода. Я вижу, что customer.Name имеет значение null - это, очевидно, то, что вызывает это исключение.

Почему Имя (наряду со всеми другими аналогичными свойствами) недействительно? Как это разрешить?

Примечание: У меня есть дата в модели клиента, и это правильно заселением после того как я добавил следующее моей реализации DbContext ...

protected override void OnModelCreating(DbModelBuilder modelBuilder) { 
     modelBuilder.Properties<DateTime>().Configure(c => c.HasColumnType("datetime2")); 
} 

Я думаю, мне нужно добавить что-то здесь иметь возможность правильно отображать имя. Я просто не знаю, как это сделать.

Заранее спасибо.

+0

Как вскоре после того, как вытягивать ваше лицо вы пытаетесь получить доступ к 'customer.Name.Forename'? Если это выходит за рамки вашего DbContext, вы столкнетесь с этой проблемой, если используете ленивую загрузку. – Gavin

+0

Я отключил ленивую загрузку в конструкторе моего DbContext с помощью 'this.Configuration.LazyLoadingEnabled = false;', поэтому это не может быть проблемой. Там есть клиент, иначе он не будет делать никаких итераций. Кроме того, поле даты, которое у меня есть в модели, заполнено –

+0

Это не имеет ничего общего с DDD или агрегатами и сущностями. Вы хотите загрузить дочерние сущности вместе с корневым классом. * Вы * отобрали связь между классами? В вашем сопоставлении отображается только не связанная спецификация типа свойства. Кроме того, вместо отключения ленивой загрузки используйте метод 'Include()'. –

ответ

0

Я добавил [ComplexType] над классом Name и теперь он работает.

Для ясности:

[ComplexType] 
class Name { 
    ... 
} 
Смежные вопросы