2016-09-30 2 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 
    } 
} 

概観、正常に動作するようですエンティティフレームワークと、保存します。少なくとも、例外はありません。 しかし、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 { 
    ... 
} 
関連する問題