首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在NHibernate中将枚举值存储为带空格的字符串

在NHibernate中,将枚举值存储为带空格的字符串可以通过以下步骤实现:

  1. 定义枚举类型:首先,需要定义一个枚举类型,其中包含需要存储为带空格字符串的枚举值。例如,我们定义一个名为"Status"的枚举类型,其中包含"Active"和"Inactive"两个枚举值。
  2. 映射枚举类型:接下来,需要在NHibernate的映射文件中将枚举类型映射到数据库中的相应列。在映射文件中,使用<property>元素来定义该列,并指定type属性为枚举类型的全限定名。例如:
代码语言:xml
复制
<property name="status" column="status_column" type="Namespace.Status, AssemblyName" />

其中,Namespace.Status是枚举类型的全限定名,AssemblyName是包含该枚举类型的程序集名称。

  1. 自定义枚举类型处理器:由于NHibernate默认将枚举值存储为整数,我们需要自定义一个枚举类型处理器来将枚举值转换为带空格的字符串。首先,创建一个实现IUserType接口的自定义类型处理器类。在该类中,实现NullSafeGetNullSafeSet方法来进行值的转换。例如:
代码语言:csharp
复制
public class EnumStringType<T> : IUserType where T : struct
{
    public object NullSafeGet(IDataReader rs, string[] names, object owner)
    {
        var value = NHibernateUtil.String.NullSafeGet(rs, names[0]);
        if (value == null)
            return null;
        return Enum.Parse(typeof(T), value.ToString().Replace(" ", ""));
    }

    public void NullSafeSet(IDbCommand cmd, object value, int index)
    {
        if (value == null)
        {
            NHibernateUtil.String.NullSafeSet(cmd, null, index);
        }
        else
        {
            var enumValue = (T)value;
            NHibernateUtil.String.NullSafeSet(cmd, enumValue.ToString().InsertSpaces(), index);
        }
    }

    // 其他接口方法的实现...
}

其中,InsertSpacesReplace方法是自定义的扩展方法,用于在枚举值中插入空格和移除空格。

  1. 注册自定义类型处理器:最后,需要在NHibernate的配置文件中注册自定义类型处理器。在配置文件中,使用<typedef>元素来定义自定义类型处理器,并将其与枚举类型关联。例如:
代码语言:xml
复制
<typedef name="Status" class="Namespace.EnumStringType`1[[Namespace.Status, AssemblyName]], AssemblyName" />

其中,Status是枚举类型的名称,Namespace.EnumStringType是自定义类型处理器的全限定名,AssemblyName是包含自定义类型处理器的程序集名称。

通过以上步骤,我们可以在NHibernate中将枚举值存储为带空格的字符串。在应用场景中,这种方式可以用于存储具有空格的枚举值,例如"New York"、"San Francisco"等地点信息。对于腾讯云相关产品和产品介绍链接地址,可以参考腾讯云官方文档或咨询腾讯云技术支持人员获取更详细的信息。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

iOS·枚举变量在 未赋值赋值为空 的情况下,默认值为0(即第一个枚举类型)

枚举类型变量的赋值特性: 一个枚举类型如果没有赋初值,则默认值为0。 一个枚举类型如果赋值为nil,同样值为0。...= 1 }; 在调用的时候,代码欲从VC的字典数组 self.resource 中获取某字典 self.resource[indexPath.row] 并取出 type 的键值对,但实际使用时,该字典并不存在键值对...,即 [self.resource[indexPath.row] objectForKey:@"type"] 为空,这时候如果把它传递给枚举类型,所获得到的枚举类型仍为0。...打个断点,可以发现type1和type2的值均为PopupTypeNormal,即第一个枚举类型。...结论 可见,某些博客讲的,上述这些对字典的判空方法,是无效的。

7.7K10
  • 高性能MySQL(三):Schema与数据类型优化

    CHAR: CHAR类型是定长的,当存储CHAR值时,MySQL会删除所有的末位空格。CHAR值会根据需要采用空格进行填充以方便比较。 CHAR适合存储很短的字符串,或者所有的值都接近一个长度。...---- 再次重申:数据如何存储取决于存储引擎,而本篇我们只讲InnoDB ---- BLOG 和 TEXT 类型 BLOG和TEXT都是为存储很大的数据而设计的字符串数据类型,分别采用二进制和字符串方式存储...---- 使用枚举(ENUM)代替字符串 有时候可以使用枚举列代替常用的字符串类型。...枚举列可以把一些不重复的字符串存储成一个预定义的集合。...MySQL在存储枚举时非常紧凑,会根据列表值的数量压缩到一个或者两个字节中,MySQL会在内部将每个值在列表中的位置保存成整数,并且在表的.frm文件中保存 “数字 - 字符串”映射关系的查找表。

    64510

    MySQL数据类型与优化

    3、INNODB会把过长的VARCHAR存储为BLOB(二进制方式存储的字符串)。...4、在MySQL5.0或更高的版本,VARCHAR类型在存储和检索的时候会保留末尾空格,但在4.1或更老的版本,会剔除末尾的空格。而CHAR类型在新老版本都会查询末尾的空格。...枚举列可以把一些不重复的字符串存储成一个预定义的集合。MySQL在存储枚举时非常紧凑,会根据列表值的数量压缩到一个或两个字节中。...MySQL在内部会将每个值在列表中的位置保存为整数,并且在表的.frm文件中保存"数字-字符串"映射关系的"查找表"。 2、枚举字段是按照内部存储的整数而不是定义的字符串进行排序的。...4、由于MySQL把每个枚举值都保存为整数,并且必须进行查找才能转换为字符串,所以枚举列有一些开销,通常枚举列都比较小,所以开销还可以控制,在特定情况下,把CHAR/VARCHAR列与枚举列进行关联可能会直接比关联

    1.6K10

    如何使用Fluent Nhibernate中的Automapping进行OR Mapping映射

    由于在项目中使用了NHibernate来作为ORMapping构建数据访问层,那么就必须要配置Object和DataTable的映射。...更多的修改意味着更多的风险,为了减少这方面的风险,同时为了减少配置的工作量,所以在最新的项目中采用了Fluent NHibernate中的Automapping。...(比如Course和Student是多对多关系,那么产生的中间表表名为COURSE_STUDENT) 对于枚举,在数据库中使用tinyint也就是一个Byte来存储,枚举在Automapping中作为UserType...Hilo值的主键生成方式,使用一个表HIBERNATE_UNIQUE_KEY存储每个表的流水。...+“_ID” if (instance.Type == typeof(long))//接下来设置主键的生成方式为HiLo值方式 { instance.GeneratedBy.HiLo

    1.1K10

    我的CMS开发记-3 只要是人就会犯错误,只要是软件就会有BUG,即使他是nhibernate

    将nhibernate的引用移除,直接引用nhibernate的源码开始调试,没想到啊没想到,居然还真的被我给找出bug来了。     ...nhibernate处理access时,使用的是jetdriver这个方言。由于access的特殊性(sql语句做连接时,必须要用括号),于是在jetdriver里,对sql语句进行了处理。...原来bug就在这里, 他在查找关键字时,是按照"from","where"这两个,但是,from,where这两个词必须要在头尾加上空格才能保证不会和其他单词混淆。原文是没有空格的。...再一跟,OMG, jetdriver.cs里的bug还真不少,又来一个:132行处,返回的字符串居然把 from 关键字给吃掉了,晕,他们到底测试过没啊??...,一切顺利,我的系统在sql,access两个数据库下都顺利的跑起来了!庆祝一下呵呵.

    58680

    C - 基础总结

    枚举作用域 一般定义在函数外,每一个枚举值都对应一个整形数,默认为0,依次递增。枚举类型的变量,无论什么类型 都占据4个字节。而枚举变量中真正存储的是,枚举值对应的整形的数。...所以使用%d输出枚举的值。 所以也可以直接为枚举变量赋值整形变量。但是一般不建议这么做 ,可读性降低。...N(10); 宏带参数替换的原理 先将参数赋值,然后在将宏值里面用到参数的地方替换为值,最后宏替换,将值替换为宏名。 使用带参数的宏注意点 宏不是函数,所以宏的参数不需要添加类型说明。...我们在定义宏的时候,编译器是如何区分宏名和宏值的。 #define 宏名 宏值 宏名中不可以有空格,与参数之间也不可以有空格。...为带参数的宏传值的时候,是本色传递,如果传递一个变量,并不是传递这个变量的值,而是直接传递的就是这个变量的串。 宏值一旦换行就认为宏定义结束了,需要使用 \ 来拼接宏 宏只适合于少量的代码。

    1.2K110

    Fluent NHibernate之旅二--Entity Mapping

    类,然后在构造方法中完成映射方法,就能完成传统方式的映射了。...Map(Expression> expression):与Id类似,对应NHibernate中的property,我这里只是简单的映射,还有很多特性,在今后的教程中会慢慢使用...映射做好了,接下来我们在NHibernate中把映射加到配置中。...二、使用自定义类型映射实体属性 NHibernate支持我们用自定义的类型来映射属性,但因为我是初学,我真的不会,当然我在网上找到了相关的资料,在此也不多说,就说说Fluent的方式吧,在我映射自定义属性的时候...在Order实体中,我们看到了订单状态我用了OrderState枚举类型,数据库存储类型为tinyint,对于它的映射,我们只需要: public class OrderMap : ClassMap<Order

    1K90

    C#——Nhibernate探索

    我们可以分析得出,其中Required_Bins存储的是类库和其他资源;字面的意思Required,是必须文件。 打开Required文件夹,我们看到里面是这样的。 ?...,所以,如果程序可以运行,那么这个类,一定会读配置文件中SQL字符串连接。...我推断,这里就是数据库连接字符串的模板。 由于我使用的数据库是sqlserver,所以,我复制了mssql.cfg.xml。...为什么说是探索之旅呢,因为,我也是首次配置Nhibernate,我平常更多的是使用Entity Framework。 文中使用了一些推断,猜测的词语。那是因为,真的是在推断的。...---------------------------------------------------------------------------------------------- 注:此文章为原创

    50330

    C# 数据操作系列 - 11 NHibernate 配置和结构介绍

    实例状态 在NHibernate中,一个可持久化的对象有三种不同的状态,依据与持久化上下文之间的关系不同,其中ISession就是一个持久化上下文。...dialect 数据库方言,表示NHibernate连接的数据库是什么,该用哪种格式解析关系映射到数据库SQL语句 default_schema 默认的schema,用来设置连接字符串连接的数据库默认的...数据库连接字符串的名称,指的是配置在程序的配置文件中 connectionStrings节点的数据连接字符串。...show_sql 是否在控制台中打印转换的SQL语句,一般在调试的过程中会设置为true,用来确认生成的SQL是否正确等。...有几个候选值:create或create-drop、update等。

    1.3K20

    MySQL-2

    当字符串的最大长度比平均长度大很多时;列的更新很少;使用了UTF-8时比较适合用VARCHAR。MySQL在存储和检索时会保留末尾空格。InnoDB会把过长的VARCHAR存储为BLOB。...CHAR类型时定长的:MySQL总是根据定义的字符串的长度分配足够的空间。当存储CHAR值时,MySQL会删除所有的末尾空格。CHAR值会根据需要采用空格进行填充以方便比较。...BINARY和VARBINARY存储的事二进制字符串,二进制字符串存储的是字节码而不是字符。MySQL填充BINARY采用的是\0而不是空格,在检索时也不会去掉填充值。...Enum枚举类型 值也可以是空串(“”) 或 NULL 枚举类型是特殊的字符串类型,定义枚举列后,真正存在表中的是整数,表的.frm文件则保存整数和枚举字符串的映射关系 如:CREATE TABLE...全能的枚举:防止过度使用枚举。 变相的枚举:枚举列允许在列中存储一组定义值中的单个值,集合(SET)则允许在列中存储一组定义值中的一个或多个值。

    82110

    LINQ在开发中的地位?

    但是依然没有将数据库持久化数据映射为领域对象,所以还是一种针对数据库的编程模型。 LINQ是微软将在C# 3.0中将推出的语言集成查询技术,许多人也将LINQ叫做微软的ORM。...=Object,也就是说他解决的就是Data=Object.。作为底层框架,可以为ORM实现提供更强大的基础平台。在Linq之前在.net领域最流行的框架就是Nhibernate。...是不是在LINQ之后Nhibernate就要消失呢?答案自然是否定的。...这里有个帖子Microsoft LINQ + NHibernate: 在那篇帖子中,作者列举了三大原因: 在DLINQ中,虽然可以在语言层级定义查询逻辑。...但是依然没有将数据库持久化数据映射为领域对象,所以还是一种针对数据库的编程模型。而Nhibernate则可以直接将关系数据映射为领域模型,这是DLINQ的主要问题。

    1.4K60

    数据库之数据类型详解

    优化建议: 字符串的长度相差较大用VARCHAR; 字符串短,且所有值都接近一个长度用CHAR; BINARY和VARBINARY存储的是二进制字符串,与字符集无关; BLOB系列存储二进制字符串,与字符集无关...1、char和varchar CHAR(M) 为固定长度的字符串,在定义时指定字符串列长,当保存时在右侧填充空格以达到指定的长度,M 表示列长度,取值范围是 0~255 个字符,例如,CHAR(4) 定义了一个固定长度的字符串列...ENUM 是一个字符串对象,其值为表创建时在列规定中枚举(即列举)的一列值,语法格式为:字段名 ENUM ('值1', '值2', ........'值n') 字段名指将要定义的字段,值 n 指枚举列表中的第 n 个值,ENUM类型的字段在取值时,只能在指定的枚举列表中取,而且一次只能取一个。如果创建的成员中有空格时,其尾部的空格将自动删除。...ENUM 值在内部用整数表示,每个枚举值均有一个索引值:列表值所允许的成员值从 1 开始编号,MySQL 存储的就是这个索引编号。枚举最多可以有 65535 个元素。

    4.3K30

    C#.Net筑基-String字符串超全总结

    字符串在存储、转换为字节码时需指定编码,一般默认为 UTF-8,这是广泛使用的编码类型,更节省空间。...2.1、字符串常用API 字符串中字符数量 2.2、字符串的不变性、驻留性 字符串是一种有一点点特别的引用类型,因为其不变性,所以在参数传递时有点像值类型。 不变性:字符串一经创建,值不可变。...对字符串的各种修改操作都会创建新的字符串对象,这一点要非常重视,应尽量避免,较少不必要的内存开销。 驻留性:运行时将字符串值存储在“驻留池(字符串池)”中,相同值的字符串都复用同一地址。...驻留的字符串(字符串池)在托管堆上存储,大家共享,内部其实是一个哈希表,存储被驻留的字符串和其内存地址。驻留池生命周期同进程,并不受GC管理,因此无法被回收。...{}字符转义,用两个{{}}即可,如果只有一边,则用单引号'{{',即输出为{。 使用三元运算符?表达式,用括号包起来即可,因为“:”在插值字符串中有特殊含义,即格式化。

    53210

    NHibernate总结

    NH.Data层为Nhibernate操作相关,其中DBConnect.cfg.xml文件为数据库连接文件(按照模板修改即可),NHData.cs包含增删改查操作,NHibernateHelper.cs...封装Nhibernate底层操作,People.cs为实体类,People.hbm.xml为映射文件(把数据库表People映射到实体类People)。...,其中People实体类中的字段要设置为virtual。每个文件的详细代码在下面介绍 (2)     在NH.Data层引用Nhibernate相关的DLL ?...我们可以在该文件上点击右键选择属性进行修改。 (2)     NHibernateHelper.cs数据操作辅助类 我们现在可以开始NHibernate了。...virtual,要不然会报错 (4)     下面我们开始为People实体类进行数据库表映射配置People.hbm.xml NHibernate要知道怎样去加载和存储持久化类的对象。

    94040

    MySQL全字段类型概览

    在进行具体介绍数据类型前,先介绍下用到的约束信息: 对于整数类型,M表示最大的显示宽度。对于浮点类型和定点类型,M表示可存储的数字位数的总数。对于字符串类型,M表示最大长度。...fsp的范围为0-6,默认值是0(不同于标准SQL的默认值6)。 计算机用二进制存储数据,而每个bit只可能是0或1,是没有小数点的,所以为了存储带小数的实数,就出现了定点数和浮点数。...这些类型用于保存重要的带准确精度的值,比如说钱。在MySQL中,NUMERIC是DECIMAL实现的,DECIMAL是用二进制存储的。...BINARY[(M)] BINARY类型类似于CHAR类型,但存储的是二进制字节串而不是非二进制字符串。可选长度M表示以字节为单位的列长度。如果省略,M默认值为1。...与将JSON格式的字符串存储在字符串列中相比,JSON数据类型提供了以下优点: 自动验证JSON文档存储在JSON列。无效文档会产生错误。 优化的存储格式。

    3.2K20

    Java后端开发规范(基于阿里开发规范)

    正例:枚举名字为 ProcessStatusEnum 的成员名称:SUCCESS / UNKOWN_REASON。...正例:// 注释内容,注意在//和注释内容之间有一个空格。 【强制】方法参数在定义和传入时,多个参数逗号后边必须加空格。 正例:下例中实参的"a",后边必须要有一个空格。...说明:使用 toArray 带参方法,入参分配的数组空间不够大时,toArray 方法内部将重新分配 内存空间,并返回新数组地址;如果数组元素大于实际所需,下标为[ list.size() ]的数组 元素将被置为...【强制】如果存储的字符串长度几乎相等,使用 char 定长字符串类型。...【强制】varchar 是可变长字符串,不预先分配存储空间,长度不要超过 5000,如果存储长度大于此值,定义字段类型为 text。

    86021

    第11章、数据类型

    image.png 显示为存储在表格最后一行的值仅适用 于不使用严格模式的情况 ; 如果MySQL在严格模式下运行,则超出列长度的值不会被存储,并会导致错误。...t -> ORDER BY comment; ENUM 枚举是一个字符串对象,其值是从表创建时列规范中显式枚举的允许值列表中选择的值。...它有以下的好处: 紧凑的存储特性,字符串会被映射为数字存储; 良好的可读性; 真实场景下很少用到? SET SET 由0~64个以,分隔的字符串构成的,要注意成员值本身是不包含逗号的。...SET字符串尾部的空格将会自动被移除。...对于除了枚举类型之外的字符串值,其默认值是空字符串;对于枚举类型,其默认值则是枚举类型中的第一个值。

    1.7K20
    领券