Как сделать таблицу дискриминатора более полезной
Я пытаюсь повторить эту структуру таблицы из этой статьи.
Вот мои 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 ответ
Решение
Ключ здесь в том, что Id и Discriminatorcolumn должны иметь одинаковое имя столбца
public class StatusMap : ClassMap<Status>
{
public StatusMap()
{
Id(x => x.Id, "ItemStatus").GeneratedBy.Assigned();
DiscriminateSubClassesOnColumn<int>("ItemStatus", 0);
}
}