Welcome

首页 / 软件开发 / .NET编程技术 / 用NHibernate持久化enum和bool类型

用NHibernate持久化enum和bool类型2013-12-10开篇

用NHibernate持久化类的enum和bool类型的属性的时候,我们需要持久化的更通用一些,数据库无关一些。

枚举持久化为对应整数的字符串,NH默认持久化为整数。

布尔的持久化默认根据数据库的类型而不同,sqlserver会持久化为bit,可是很多数据库没有bit类型,通常用char来持久化。

可以选择持久化为Y和N,也可以选择持久化为1和0。

1、枚举enum的持久化

将枚举持久化成一个字符串,也就是将枚举对应的整数持久化到数据库。

public enum Status { Yes = 1, No = 2 }
public class Product { public Product() { this.CreateTime = DateTime.Now; this.ModifyTime = DateTime.Now; } public virtual Guid Id { get; set; } public virtual string Name { get; set; } public virtual bool Discontinued { get; set; } public virtual DateTime CreateTime { get; set; } public virtual DateTime ModifyTime { get; set; } public virtual Category Category { get; set; } public virtual int Version { get; set; } public virtual bool IsDelete { get; set; } public virtual Status Status { get; set; } }
直接在column中加入sql-type属性,设置为数据库列对应的类型就可以了。

<property name="Status"> <column name="Status" sql-type="varchar(10)" default="1" not-null="true"></column> </property>
2、布尔bool的持久化

2.1 持久化为Y和N

<property name="IsDelete" type="NHibernate.Type.YesNoType, NHibernate" column="IsDelete"> <column name="IsDelete" sql-type="char(1)" default="0" not-null="true"></column> </property
使用上面的配置,在数据库存储的就是Y和N,代表true和false。