0
C# 응용 프로그램에 Entity Framework를 사용하고 있습니다.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
}
}
의
개요 제 1, 잘 작동하는 것 같다 엔티티 프레임 워크, 저장; 적어도 예외는 없습니다. 그러나 DbContext.getAll()
을 사용하는 모든 고객을 얻으려고하면 customer.Name.Forename
을 출력 창에 인쇄하려고 할 때 NullReferenceException이 발생합니다. 나는 customer.Name
이 null이라는 것을 알 수 있습니다 - 이것은 분명히 그 예외의 원인입니다.
이름이 다른 모든 유사한 속성과 함께 null 인 이유는 무엇입니까? 어떻게 해결할 수 있습니까?
참고 : 내가 여기에 무언가를 추가 할 필요가 생각하고
protected override void OnModelCreating(DbModelBuilder modelBuilder) {
modelBuilder.Properties<DateTime>().Configure(c => c.HasColumnType("datetime2"));
}
... 나는 고객 모델의 날짜를 내가 내 DbContext 구현에 다음을 추가 한 후이 제대로 채우고 이름을 올바르게 매핑 할 수 있어야합니다. 나는 그것에 대해 어떻게 가야할지 잘 모르겠습니다.
미리 감사드립니다.
얼마나 빨리 당신의 엔티티 당기 후 당신은'customer.Name.Forename'에 액세스하려고? DbContext의 범위 밖에있는 경우 지연로드를 사용하는 경우이 문제가 발생합니다. – Gavin
'this.Configuration.LazyLoadingEnabled = false; '로 DbContext의 생성자에서 지연로드를 비활성화 했으므로 문제가 될 수 없습니다. 거기 고객이 있습니다, 그렇지 않으면 어떤 반복도하지 않을 것입니다. 또한 모델에있는 날짜 필드에 채워집니다 –
이것은 DDD 또는 집계 및 엔터티와 관련이 없습니다. 하위 엔티티를 루트 클래스와 함께로드하려고합니다. * 클래스 사이의 관계를 매핑 했습니까? 매핑에는 관련없는 속성 유형 지정 만 표시됩니다. 또한, 느린 로딩을 비활성화하는 대신'Include()'메소드를 사용하십시오. –