NHibernate:空列上的属性的默认值

我正在使用其他应用程序使用的旧数据库,因此我无法修改其结构。 有时我有可以为空的列,我想要映射为非可空类型。 例如,我在数据库上有一个可空的EndValidity列,我希望在不可为空的DateTime上映射,如果为null,它应该是DateTime.MaxValue,或者作为一个更简单的例子,如果为null则必须为false的可空位列。

我正在考虑为它编写一个自定义用户类型(如果可能的话,带参数),还是nHibernate中包含了什么?

如果唯一的解决方案是编写自定义的usertype,对于布尔情况,我是否可以覆盖fluentnhibernate约定以始终将该usertype应用于布尔值?

这可能取决于你如何想要你的poco课程。 首先,如果加载空值,您是否希望重新保存空值,或者您是否希望任何会话提交/刷新使用空字段的新默认值更新记录。 如果你想在数据库中保留空值,你将如何从你的poco对象中检测到只有一个布尔值,以保存IE布尔值只有true和false选项/值但你的位类的选项/值为null,0和1?

如果说:你想在你的poco类中将你的可空位作为布尔值而不是可空的布尔数据表并让类更新数据库以删除所有空值,那么一个非常快速的解决方案,而不会深入到自定义类型中两个属性一个可以为nullable和protected,或者一个属性在接口中(没有任何映射)和基本逻辑 – 出于dependency injection的原因,所有poco类理想情况下都有一个或两个接口:EG

internal virtual bool? isActive {get;set;} public bool MyInterface.IsActive { get{ return isActive ?? false; } set{ isActive == value ?? false; }; } 

这样你的逻辑就包含在代码中,所以如果规则变得更加复杂/复杂,或者一个可空位的默认值为false,而另一个默认值为true(因为上个世纪的一些疯狂的开发人员)你可以更容易地控制转换。 它需要你使用接口而不是真正的poco类,但这也不是坏事,它只取决于你的开发模型。