Свободная вставка NHibernate Null FK - PullRequest
0 голосов
/ 23 октября 2011

У меня есть сопоставление таблицы с обнуляемым ограничением FK.В моем беглом отображении я делаю что-то вроде этого:

public enum PlayerPosition
{
        None = 0,
        Forward = 1
//etc
}

Entity

public virtual PlayerPosition? Position { get; set; }

Map(x => x.Position).Column("PlayerPositionId").CustomType< PlayerPosition>();

То, что я хотел бы сделать, это когда PlayerPosition установлен в «None», Nhibernate вставит нуль.Я не уверен, как это сделать.

1 Ответ

1 голос
/ 02 ноября 2011

я бы выбрал IUserType:

public virtual PlayerPosition Position { get; set; }

Map(x => x.Position).Column("PlayerPositionId").CustomType<PlayerPositionUserType>();

class PlayerPositionUserType : IUserType
{

    public object NullSafeGet(IDBReader reader, string[] names, object owner)
    {
        int? positionvalue = NHibernateUtil.Int32.NullSafeGet(reader, names[0]);
        return (positionvalue.HasValue) ? (PlayerPosition)positionvalue : PlayerPosition.None;
    }

    public void NullSafeSet(IDBCommand cmd, object value, int index)
    {
        var position = (PlayerPosition)value;
        if (position == PlayerPosition.None)
            NHibernateUtil.Int32.NullSafeSet(cmd, null, index);
        else
            NHibernateUtil.Int32.NullSafeSet(cmd, (int)position, index);
    }

    public Type ReturnType
    {
        get { return typeof(PlayerPosition); }
    }

    public SqlType[] SqlTypes
    {
        get { return new [] { SqlTypeFactory.Int32 } }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...