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

如何用NHibernate枚举列名?

在使用NHibernate时,如果需要将枚举类型映射到数据库列名,可以按照以下步骤进行操作:

  1. 首先,定义一个枚举类型,例如:
代码语言:csharp
复制
public enum UserType
{
    Admin,
    User,
    Guest
}
  1. 在NHibernate映射文件中,使用<property>元素定义枚举类型的映射,例如:
代码语言:xml<class name="User">
复制
   <property name="UserType" column="user_type" type="UserType, YourAssemblyName" />
</class>

其中,name属性指定映射的属性名称,column属性指定数据库列名,type属性指定枚举类型的完整名称和程序集名称。

  1. 在实体类中,定义一个属性,并将其映射到数据库列名,例如:
代码语言:csharp
复制
public class User
{
    public virtual int Id { get; set; }
    public virtual string Name { get; set; }
    public virtual UserType UserType { get; set; }
}

这样,NHibernate就会将UserType属性映射到数据库的user_type列中。

需要注意的是,在使用枚举类型时,需要确保枚举类型的定义和映射文件中的定义一致,否则可能会出现错误。同时,如果需要将枚举类型的值转换为字符串或从字符串转换为枚举类型,可以使用C#中的Enum.ParseEnum.ToString方法。

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

相关·内容

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

由于在项目中使用了NHibernate来作为ORMapping构建数据访问层,那么就必须要配置Object和DataTable的映射。...使用Fluent NHibernate的最大好处是降低了出错的机会,因为Fluent Nhibernate的配置是使用C#来编写,可以智能感知,而且还能编译,不像原始的XML配置,写错了都不知道。...比如我们可以定义如下的规则: 类名和字段名采用每个单词首字母大写的方式而数据库表名和列名使用全部大写,单词之间下划线分割的方式。...比如CostCenter中有public virtual long Id{get;set;},对应表中的列COST_CENTER_ID) 对于一对多的关系,使用父方的类名作为属性名,表中使用父表的主键列名作为对应的外键列的列名...(比如Course和Student是多对多关系,那么产生的中间表表名为COURSE_STUDENT) 对于枚举,在数据库中使用tinyint也就是一个Byte来存储,枚举在Automapping中作为UserType

1.1K10

业务高速增长,祺出行如何用腾讯云消息队列 RocketMQ 应对挑战

导语 作为广汽集团旗下的智慧出行平台,祺出行上线四年时间,用户规模和订单量保持高速增长。...在过去的2022年,祺出行平台累计注册用户突破1800万,同比增长64%,年度订单总量超7000万,同比增长52%。 高速增长的用户规模和订单量,对技术平台提出更高要求。...为了提升架构的稳定性,保障用户体验,祺出行于2021年启动架构升级。其中,引入消息队列做异步化是整个分布式架构设计的核心手段之一。...消息队列选型 2019年以来,祺出行主要采用 CMQ 作为订单主业务的消息队列,CMQ 是一种大规模分布式消息系统,它具有高可用性、高吞吐量、海量存储和高并发能力等特点,可以帮助用户在分布式系统中进行异步通信...祺打车业务流程介绍 在整个下单流程中,从预估到下单,再从派单到开始服务,最后到费用结算,一共要经过 20+ 流程环节,其中计费订单系统是所有系统的核心,从用户输入上下车地点,背后的业务系统就开始工作

24940

NHibernate实践与模式

NHibernate实践与模式 NHibernate是一款非常优秀的O/R mapping的开源框架,再还没有.net的时候它已经存在于java环境中。...CURD的操作语句可以从源代码看,它是生成的是参数形势的sql脚本并且支持特别的参数,,oracle的to_date,to_char等; 从上图可以看出实现了数据库的无关性,开发人员无须关心底层的数据库类型...开发环境 Vs.net 2005, NHibernate 1.20(正是版),MyGeneration 1.3。...开发步骤 一般我们是在先有数据库表结构的情况下,一层一层往上写,先创建数据库表,然后写数据库访问层的代码(可以通过一些通用的ado.net类库完成 Enterpriselibrary),接下来开始编写业务曾代码...然后再去创建数据库表,和UI的部分; 我还是按在有数据表的情况下如何用NHibernate作开发 1.用MyGeneration创建实体类和mapping文件选择NHibernate lujan99 1.06

80240

NHibernate的单表继承模式下通过父类Repository查询子类

NHibernate中经常遇到继承与关系数据库的ORMapping的问题,我之前的一篇博客(http://www.cnblogs.com/studyzy/archive/2011/08/16/2140675...在NHibernate中经常会遇到通过父类的Repository来查询子类的情况,比如现在有一个抽象的Employee对象,下面有OfficeUser和Teacher两个具体的对象,这两个对象都有其特有的属性...必须这么写,不能写成大写的Class,也不能换成其他字,只有这样才能让NHibernate理解,并正确返回结果。...='Teacher'");  var ems = cri.List(); 这里又不一样了,where条件后面跟的“Type”是Employee表的Discriminator,是一个列名...以上是以最简单了例子说明了如果通过父类查询具体的子类的方法,实际项目中肯定比这个查询要复杂,但是只要记住了这三种查询的要点,结合其他条件就可以写出NHibernate能够理解的查询。

33020

Fluent NHibernate之旅二--Entity Mapping

如果你要体验NHibernate的强大,首先你就要学会配置,包括SessionFactory和Mapping的配置。今天跟上一篇一样,会使用传统方式和 NHibernate 进行讲解。...Created, Paied, Consignment, Complete, } 稍微简单介绍下,订单有订单号、总价、订单状态、创建时间等属性,状态现在是int类型,过后我演示一下如何使用枚举型...对于我这种新手来说,Fluent更适合我,因为我可以用它来进行学习NHibernate。 映射做好了,接下来我们在NHibernate中把映射加到配置中。...在Order实体中,我们看到了订单状态我用了OrderState枚举类型,数据库存储类型为tinyint,对于它的映射,我们只需要: public class OrderMap : ClassMap<Order...前几天的开篇“Fluent NHibernate之旅一”,反响不是很好,或许大家用NHibernate的真的很少,或许我写的不够好,或许。。。。

1K90

Fluent NHibernate之旅(三)-- 继承

经过了“开篇”和“简单映射”两篇文章,相信大家对Fluent NHibernate 有了一定的了解了,FluentNHibernate实际就是对 NHibernate 映射的一定扩展,我们能完全利用强类型...、泛型、Lambde表达式等等Vs、Framework等特性简单完成映射工作,同时也能让我们学习NHibernate的映射方式,一举夺得,这么好玩的东东,有理由不继续完成这个系列吗?...从这一篇开始,我们将使用Fluent NHibernate RC 1.0 版来进行演示,先前的代码,我会另外进行说明 继承 在OOP中,继承作为OO中重要的特性,如果NHibernate没有对它的支持,...因为需要标识符,所以我们必须添加一个标识符,我这里使用枚举类型来表示,代码改变成如下: public enum ProductType { Mobile, Book } public...总结 这次说了一下继承的映射方式,其实很早就写好了,正好遇到Fluent NHibernate发布了RC版,所以用了一些时间去学习了下,总的来说,这次升级呢非常好,可能会存在更多的bug,但不影响我们的正常使用

66680

Hibernate HQL注入攻击入门

作者 Taskiller SQL注入是一种大家非常熟悉的攻击方式,目前网络上有大量存在注入漏洞的DBMS(MySQL,Oracle,MSSQL等)。...什么是Hibernate Hibernate是一种ORM框架,用来映射与tables相关的类定义(代码),并包含一些高级特性,包括缓存以及继承,通常在Java与.NET中使用(可参考NHibernate...如果列名不是Hibernate中实体定义的一部分,则其会触发异常: from Bookwhere title like '%' and DOESNT_EXIST=1 and ''='%' and...')=1 or ''='%' and book0_.published=1 [22018-159] 技巧:调用后台函数 如前所述,Hibernate会在SELECT和WHERE语句中隐藏一些不可识别的列名...docs.jboss.org/hibernate/orm/3.3/reference/en/html/queryhql.html HQLmap:也许是目前能够进行自动HQL注入的唯一工具(暴力破解实体与列名

4.1K80

iBatis.Net(5):Data Map(了解)

,也是不得意而为,因为你不从本质上了解它的协作过程,不会把这个框架运用的很好的 这一篇要写到的,就是我们所有的查询语句的定义,DataMap,它也是定义在xml文档里的,的确iBatis.Net没有像nhibernate...iBatis.Net的特性,或者说叫优势,这里说这些可能您还不懂得这个优势到底体现在哪里,看完这篇文章,我觉得您一定会觉得略微猥琐的爱上它的,哦,突然想起来,有朋友在我上一篇的留言里说,让我把iBatis.Net和nhibernate...对比的写一下,我如果有时间,会写一些关于nhibernate的文章的,但是,我还是觉得,您如果真想了解这两个框架的优劣势,还是先把这两个框架都研究个差不多,然后自己去体会他们的差距和优劣势比较好,我可能对某一种框架的某种特性有特别的偏爱...因为我们在映射文件中定义的是Customers表中所有的数据,然后通过这个Select节点的resultClass定义返回数据的实体类型,就是我们一开始定义的那个Customers列,因为这个类的属性都是与数据表中的列名和数据类型对应的...我就不解释了,这个方式很好的解决了我上面的“刁难” 但是,小白总是刁难不断的人,现在又有了一个问题,如果我们的数据实体类已经定义好了,并且已经在很多地方使用,这个时候更改它是绝对不可能的啦,但是我们数据库中的列名与数据实体类中的属性名称却不对应

74260

Java单例模式的7种写法中,为何用Enum枚举实现被认为是最好的方式?【享学Java】

代码稍微复杂点,但显得比较高级~ 7、枚举 public enum Singleton { INSTANCE; } 使用枚举方式实现,也是本文的主菜。...具体示例代码,可以参考枚举实现的源码,哈哈。 再看看它的序列化、反序列时会不会有问题。...所以它序列化也是不安全的 下面看看枚举大法 使用枚举实现单例极其的简单: public enum EnumSingleton { INSTANCE; } 首先看看是否防御反射攻击: public...说明:反射在通过newInstance创建对象时,会检查该类**是否ENUM修饰**,如果是则抛出异常,反射失败,因此枚举类型对反射是绝对安全的。 那么,枚举对序列化、反序列化是否安全?...因此:枚举类型对序列化、反序列也是安全的。 综上,可以得出结论:枚举是实现单例模式的最佳实践。

12.4K96
领券