我們知道,資料庫中DateTime子段允許為空白(null)。當我們在ASP.NET中映射為DateTime是就不允為空白了。該怎麼處理?基本有兩種辦法:
(1)修改.hbm.xml檔案中的類型,該"DateTime"為"String",該實體檔案中的屬性類型"DateTime"為"String"。
處理的時候,該屬性值要麼為空白,要麼是具有正確日期格式的字串。
該方法只適合DateTime類型,而對int,bool類型就不適應了。下面就看第二種方法。
(2)Nullables處理
(1)添加引用:Nullables.dll與Nullables.NHibernate.dll
(2)修改設定檔.hbm.xml對應的類型,如:
<property name="InDate" column="inDate" type="DateTime"/>修改為:
<property name="InDate" column="inDate" type="Nullables.NHibernate.NullableDateTimeType,Nullables.NHibernate"/>
(3)修改實體類檔案,如:
private DateTime _inDate;
/// <summary>
/// 添加日期
/// </summary>
public DateTime InDate
{
get { return _inDate; }
set { _inDate = value;
} 修改為:
private Nullables.NullableDateTime _InDate;
/// <summary>
/// 添加日期
/// </summary>
[NHibernate.Mapping.Attributes.Property]
public Nullables.NullableDateTime InDate
{
get { return _InDate; }
set { _InDate = value; }
}
(4)給屬性InDate賦值:
Item clsItem = new Item();
clsItem.InDate = new NullableDateTime(System.DateTime.Now);
如果要輸入空值,如:clsItem.InDate = nulll;
(5)擷取屬性InDate的值:
ItemCRUD clsCRUD = new ItemCRUD(); //對實體類的操作
Item clsItem = clsCRUD.ItemDetails(id); //擷取實體類
this.txtInDate.Text = clsItem.InDate.ToString();
通過第二種方法可以對資料庫中對應的整形、bool類型等賦空值。
產生實體類的CodeSmith模版:/Files/zsy/NHibernate_Entity.rar
產生.hbm.xml的CodeSmith模版:/Files/zsy/NHibernate_Mapping.rar
文章來源:http://zsy.cnblogs.com/archive/2006/01/06/312488.html