2011-08-01 8 views
2

私はthisの記事からこのテーブル構造を複製しようとしています。ここでディスクリミネータテーブルをより便利にする方法

http://grabbagoftimg.s3.amazonaws.com/nhib_disc_01.PNG

私POCOさんとのマッピングがあります。

POCOの

public class Item 
{ 
    public virtual int Id { get; set; } 
    public virtual Status ItemStatus { get; set; } 
} 

public abstract class Status 
{ 
    private readonly int _id; 
    public static readonly Status Foo = new FooStatus(1); 
    public static readonly Status Bar = new BarStatus(2); 

    public Status() 
    { 

    } 

    protected Status(int id) 
    { 
     _id = id; 
    } 

    public virtual int Id { get { return _id; } } 
    public abstract string Name { get; } 
    public abstract string BackgroundColor { get; } 
} 

public class FooStatus : Status 
{ 
    public FooStatus() 
    { 

    } 

    public FooStatus(int id) 
     : base(id) 
    { 

    } 

    public override string Name 
    { 
     get { return "Foo Status"; } 
    } 

    public override string BackgroundColor 
    { 
     get { return "White"; } 
    } 
} 

public class BarStatus : Status 
{ 
    public BarStatus() 
    { 

    } 

    public BarStatus(int id) 
     : base(id) 
    { 

    } 

    public override string Name 
    { 
     get { return "Bar Status"; } 
    } 

    public override string BackgroundColor 
    { 
     get { return "Black"; } 
    } 
} 

マッピング:

public class ItemMap : ClassMap<Item> 
{ 
    public ItemMap() 
    { 
     Id(x => x.Id).GeneratedBy.Identity(); 
     References(x => x.ItemStatus); 
    } 
} 

public class StatusMap : ClassMap<Status> 
{ 
    public StatusMap() 
    { 
     Id(x => x.Id).GeneratedBy.Assigned(); 

     DiscriminateSubClassesOnColumn<int>("ItemStatus", 0); 
    } 
} 

public class FooStatusSubMap : SubclassMap<FooStatus> 
{ 
    public FooStatusSubMap() 
    { 
     Extends<Status>(); 
     DiscriminatorValue(1); 
    } 
} 

public class BarStatusSubMap : SubclassMap<BarStatus> 
{ 
    public BarStatusSubMap() 
    { 
     Extends<Status>(); 
     DiscriminatorValue(2); 
    } 
} 

これで問題は、それがこのように私のStatusテーブルを作成することです:

同上.... ItemStatus

1 ..... 1

2 ..... 2

ご覧のとおり、両方の列には常に同じ値が含まれているので、これはむしろ意味がありません。

私は上記の画像をどのように複製できますか?ここ

答えて

3

キーは、IDとDiscriminatorcolumnは、同じ列名

public class StatusMap : ClassMap<Status> 
{ 
    public StatusMap() 
    { 
     Id(x => x.Id, "ItemStatus").GeneratedBy.Assigned(); 

     DiscriminateSubClassesOnColumn<int>("ItemStatus", 0); 
    } 
} 
+0

恐ろしいを持たなければならないということ、です!答えをありがとう。 – User

関連する問題