2016-09-30 1 views
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 구현에 다음을 추가 한 후이 제대로 채우고 이름을 올바르게 매핑 할 수 있어야합니다. 나는 그것에 대해 어떻게 가야할지 잘 모르겠습니다.

미리 감사드립니다.

+0

얼마나 빨리 당신의 엔티티 당기 후 당신은'customer.Name.Forename'에 액세스하려고? DbContext의 범위 밖에있는 경우 지연로드를 사용하는 경우이 문제가 발생합니다. – Gavin

+0

'this.Configuration.LazyLoadingEnabled = false; '로 DbContext의 생성자에서 지연로드를 비활성화 했으므로 문제가 될 수 없습니다. 거기 고객이 있습니다, 그렇지 않으면 어떤 반복도하지 않을 것입니다. 또한 모델에있는 날짜 필드에 채워집니다 –

+0

이것은 DDD 또는 집계 및 엔터티와 관련이 없습니다. 하위 엔티티를 루트 클래스와 함께로드하려고합니다. * 클래스 사이의 관계를 매핑 했습니까? 매핑에는 관련없는 속성 유형 지정 만 표시됩니다. 또한, 느린 로딩을 비활성화하는 대신'Include()'메소드를 사용하십시오. –

답변

0

Name 클래스 위에 [ComplexType]을 추가했으며 현재 작동 중입니다. 명확성을 위해

:

[ComplexType] 
class Name { 
    ... 
} 
관련 문제