Как сделать таблицу дискриминатора более полезной - PullRequest
2 голосов
/ 01 августа 2011

Я пытаюсь скопировать эту структуру таблицы из этой статьи.

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

Вот мои 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, например:

Id .... ItemStatus

1 ..... 1

2 ..... 2

Как видите, это довольно бесполезно, поскольку оба столбца всегда содержат одинаковые значения.

Как мне скопировать изображение, которое я связал выше?

1 Ответ

3 голосов
/ 02 августа 2011

ключ здесь в том, что Id и Discriminatorcolumn должны иметь одинаковое имя столбца

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

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