Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 在NHibernate中将枚举映射为varchar而不是nvarchar_Sql Server_Nhibernate - Fatal编程技术网

Sql server 在NHibernate中将枚举映射为varchar而不是nvarchar

Sql server 在NHibernate中将枚举映射为varchar而不是nvarchar,sql-server,nhibernate,Sql Server,Nhibernate,在Fluent NHibernate中,是否有人知道是否可以将枚举映射为varchar而不是nvarchar列 我可以将枚举映射为int或nvarchar,但不能映射为ANSI字符串varchar。nhibernate中没有用于此的内置类型。您可以使用以下类型来实现它: [Serializable] public abstract class EnumAnsiStringType : AbstractEnumType { public const int

在Fluent NHibernate中,是否有人知道是否可以将枚举映射为varchar而不是nvarchar列


我可以将枚举映射为int或nvarchar,但不能映射为ANSI字符串varchar。

nhibernate中没有用于此的内置类型。您可以使用以下类型来实现它:

    [Serializable]
    public abstract class EnumAnsiStringType : AbstractEnumType
    {
        public const int MaxLengthForEnumString = 255;
        protected EnumAnsiStringType(Type enumClass)
            : this(enumClass, MaxLengthForEnumString) { }
        protected EnumAnsiStringType(Type enumClass, int length)
            : base(SqlTypeFactory.GetAnsiString(length), enumClass) { }
        public override string Name
        {
            get { return "enumstring - " + ReturnedClass.Name; }
        }
        public virtual object GetInstance(object code)
        {
            //code is an named constants defined for the enumeration.
            try
            {
                return StringToObject(code as string);
            }
            catch (ArgumentException ae)
            {
                throw new HibernateException(string.Format("Can't Parse {0} as {1}", code, ReturnedClass.Name), ae);
            }
        }
        public virtual object GetValue(object code)
        {
            //code is an enum instance.
            return code == null ? string.Empty : Enum.Format(ReturnedClass, code, "G");
        }
        public override void Set(IDbCommand cmd, object value, int index)
        {
            var par = (IDataParameter)cmd.Parameters[index];
            if (value == null)
            {
                par.Value = DBNull.Value;
            }
            else
            {
                par.Value = GetValue(value);
            }
        }
        public override object Get(IDataReader rs, int index)
        {
            object code = rs[index];
            if (code == DBNull.Value || code == null)
            {
                return null;
            }
            else
            {
                return GetInstance(code);
            }
        }
        public override object Get(IDataReader rs, string name)
        {
            return Get(rs, rs.GetOrdinal(name));
        }
        public override string ToString(object value)
        {
            return (value == null) ? null : GetValue(value).ToString();
        }
        public override object Assemble(object cached, ISessionImplementor session, object owner)
        {
            if (cached == null)
            {
                return null;
            }
            return GetInstance(cached);
        }
        public override object Disassemble(object value, ISessionImplementor session, object owner)
        {
            return (value == null) ? null : GetValue(value);
        }
        public override string ObjectToSQLString(object value, NHibernate.Dialect.Dialect dialect)
        {
            return GetValue(value).ToString();
        }
    }
}