2012-03-29 15 views
6

現在、次のようになります。Entity Frameworkの - リユース複合型私はコード第1エンティティフレームワークでエンティティを持っている

public class Location 
{ 
    public string Department { get; set; } 
    public string Queue { get; set; } 
} 
:私はこのようなものとして、これらのタイプの複合型を作成したいと思います
public class Entity 
{ 
    // snip ... 

    public string OriginalDepartment { get; set; } 
    public string OriginalQueue { get; set; } 

    public string CurrentDepartment { get; set; } 
    public string CurrentQueue { get; set; } 
} 

public Location Original { get; set; } 
public Location Current { get; set; } 

は、このことが可能であり、または実行します。

私は両方の現在およびオリジナルのために、この同じタイプを使用したいのですがCurrentLocationOriginalLocationの2つの複合型を作成する必要がありますか?

public class OriginalLocation 
{ 
    public string Department { get; set; } 
    public string Queue { get; set; } 
} 

public class CurrentLocation 
{ 
    public string Department { get; set; } 
    public string Queue { get; set; } 
} 

答えて

7

2つの複合型を作成する必要はありません。カラム名をカスタマイズするには

modelBuilder.ComplexType<Location>(); 

また、あなたはこれがmyCustomName

MyEntity.Current.Queueをマップする親エンティティの設定

public class Location 
{ 
    public string Department { get; set; } 
    public string Queue { get; set; } 
} 

public class MyEntity 
{ 
    public int Id { get; set; } 
    public Location Original { get; set; } 
    public Location Current { get; set; } 
} 

public class MyDbContext : DbContext 
{ 
    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.ComplexType<Location>(); 

     modelBuilder.Entity<MyEntity>().Property(x => x.Current.Queue).HasColumnName("myCustomColumnName"); 
    } 
} 

からそれらを設定する必要があり、モデルビルダーで明示的にあなたの複合型を構成することができます

+0

私はそれがどのようにサポートされているのか分かりません。 'ComplexTypeConfiguration 'クラスには、カラム名を指定するよう要求する 'Property()'メソッドがあります。列の名前はそれぞれ違うものになるでしょう – Dismissile

+0

私は両方の複合型の列名をカスタマイズできるようにする必要があることを明確にすべきだと思います。それはサポートされていますか? – Dismissile

+0

プレフィックスが異なるか、完全にカスタマイズされていますか? – archil

関連する問題