Я пытаюсь создать столбец дискриминатора.Этот столбец будет содержать один из многих доступных статусов.Как мой код покажет, что каждый статус имеет имя, а также цвет фона.Каждый статус имеет один и тот же базовый класс.
Вот мой код:
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();
DiscriminateSubClassesOnColumn<int>("ItemStatus", 0).AlwaysSelectWithValue();
}
}
По сути, что я хотел быв том, что если я установлю ItemStatus
на Status.Foo
, то столбец ItemStatus
будет иметь значение 1. То, что я сейчас имею, не выдает никаких исключений, но всегда вставляет ItemStatus
как 0
.
Это код для вставки, который я использую:
using (var session = sessionFactory.OpenSession())
using (var transaction = session.BeginTransaction())
{
var item = new Item
{
ItemStatus = Status.Foo
};
session.Save(item);
transaction.Commit();
var firstItem = session.Get<Item>(1);
Console.WriteLine(firstItem.ItemStatus.Name);
}
Где я могу прочитать эту тему, используя FNH?
Прежде чем кто-либо предложит проверить в Google, я выполнил поискнесколько вещей, но я не могу найти полный пример.