使用nhibernate为通用选项类创建一个IUserType

本文关键字:IUserType 一个 创建 nhibernate 选项 使用 | 更新日期: 2023-09-27 17:57:38

我正在寻找一种为选项类型类创建IUserType的方法。这是选项类型类代码:

public static class Option 
{
    public static Option<T> Some<T>(T value)
    {
        return new Option<T>(value);
    }
    public static Option<T> None<T>()
    {
        return new Option<T>();
    }
}
public class Option<T>
{
    public Option(T value)
    {
        _value = value;
        _isSome = true;
    }
    public Option()
    {
        _isSome = false;
    }
    T _value;
    bool _isSome;
    public bool IsSome
    {
        get { return _isSome; }
    }
    public bool IsNone
    {
        get { return !_isSome; }
    }
    public T Value
    {
        get { return _value; }
    }
    public T ValueOrDefault(T value)
    {
        if (IsSome)
            return Value;
        return value;
    }
    public override bool Equals(object obj)
    {
        var temp = obj as Option<T>;
        if (temp == null)
            return false;
        if (this.IsNone && temp.IsNone)
            return true;
        if (this.IsSome && temp.IsSome)
        {
            var item1 = this.Value;
            var item2 = temp.Value;
            return object.Equals(item1, item2);
        }
        return false;
    }
    public override int GetHashCode()
    {
        if (this.IsNone)
            return base.GetHashCode() + 23;
        return base.GetHashCode() + this.Value.GetHashCode() + 23;
    }
}

它基本上只是用户想要的任何类型的T的包装。它最终应该映射一个可以为null的T版本。我一直找不到任何关于这样做的文档。

感谢您的帮助。

使用nhibernate为通用选项类创建一个IUserType

以下是我在IUserType类的基础上使用的一些文章:

  • 在NHibernate中实现自定义类型
  • 通用NHibernate用户类型基类
  • 实施货币类型NHibernate
相关文章: