Я использую 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"));
}
Я думаю, мне нужно добавить что-то здесь иметь возможность правильно отображать имя. Я просто не знаю, как это сделать.
Заранее спасибо.
Как вскоре после того, как вытягивать ваше лицо вы пытаетесь получить доступ к 'customer.Name.Forename'? Если это выходит за рамки вашего DbContext, вы столкнетесь с этой проблемой, если используете ленивую загрузку. – Gavin
Я отключил ленивую загрузку в конструкторе моего DbContext с помощью 'this.Configuration.LazyLoadingEnabled = false;', поэтому это не может быть проблемой. Там есть клиент, иначе он не будет делать никаких итераций. Кроме того, поле даты, которое у меня есть в модели, заполнено –
Это не имеет ничего общего с DDD или агрегатами и сущностями. Вы хотите загрузить дочерние сущности вместе с корневым классом. * Вы * отобрали связь между классами? В вашем сопоставлении отображается только не связанная спецификация типа свойства. Кроме того, вместо отключения ленивой загрузки используйте метод 'Include()'. –