首页
学习
活动
专区
工具
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.6K10

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

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

60210

MySQL数据类型与优化

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

1.5K10

如何使用Fluent NhibernateAutomapping进行OR Mapping映射

由于项目中使用了NHibernate来作为ORMapping构建数据访问层,那么就必须要配置Object和DataTable映射。...更多修改意味着更多风险,为了减少这方面的风险,同时为了减少配置工作量,所以最新项目中采用了Fluent NHibernateAutomapping。...(比如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两个数据库下都顺利跑起来了!庆祝一下呵呵.

56080

C - 基础总结

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

1.1K110

Fluent NHibernate之旅二--Entity Mapping

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

98790

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

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

1.1K20

C#——Nhibernate探索

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

47230

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)则允许列中存储一组定义一个或多个

78910

数据库之数据类型详解

优化建议: 字符串长度相差较大用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 个元素。

1.5K30

LINQ开发中地位?

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

1.4K60

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要知道怎样去加载和存储持久化类对象。

89240

第11章、数据类型

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

1.7K20

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列。无效文档会产生错误。 优化存储格式。

3K20

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

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

48321

高性能MySQL(第3版)阅读笔记

32位,bigint 64位储储空间) mysql 可为整数指定列宽,但是列宽只是图像化界面显示字符个数 5、decimal 可指定小数点前后允许最大位数,消耗存储空间,mysql 将数字打包在二进制字符串中...,每4个字节存储9个数字,小数点占一个字节 6、float 存储相同范围数据,占用存储空间比decimal小,float 使用4个字节存储,double占用8个字节 7、varchar 存储变成字符串...由于变长,更新操作更费时间(更新使得行数据长度变化,myisam 将数据猜成不同存储片段,innodb则需要分裂页,将数据放进页内)。mysql5 存储varchar 时候,空格会保留??...枚举类型将列表压缩到一个或两个字节中,内部保存是整数,并在.frm保存字符串,整数映射关系。枚举类型排序是按内部整数排序,而非字符排序。...(防止页分裂,磁盘随机读取,MD5,sha,uuid产生字符串会分布很大空间内,导致insert,select 慢) 17、in 查询,mysql会先把in列表数据进行排序,然后使用二分查找方式确定列表是否满足条件

78540
领券