我如何告诉NHibernate即使在组件的所有属性都为null的情况下也以非null的形式加载组件?

我如何告诉NHibernate即使在组件的所有属性都为null的情况下也以非null的形式加载组件?,nhibernate,nhibernate-mapping,Nhibernate,Nhibernate Mapping,我有一个Date类,它包含DateTime?类(帮助模拟DateTime.Now、我们的域等) Date类只有一个受保护的属性:DateTime?日期 public class Date { protected DateTime? date; } // mapping in hbm <component name="CompletedOn"> <property column="StartedOn" name="date" access="field" not-n

我有一个Date类,它包含DateTime?类(帮助模拟DateTime.Now、我们的域等)

Date类只有一个受保护的属性:DateTime?日期

public class Date
{
    protected DateTime? date;
}

// mapping in hbm
<component name="CompletedOn">
  <property column="StartedOn" name="date" access="field" not-null="false" />
</component>
公开课日期
{
受保护日期时间?日期;
}
//hbm中的映射
从nhibernate文档:

与所有值类型一样,组件不支持共享引用。组件的空值语义是特殊的。重新加载包含对象时,NHibernate将假定如果所有组件列都为null,则整个组件都为null。这在大多数情况下都是可以的。

我能改变这种行为吗?我希望我的Date类被实例化,即使Date为null


谢谢,

我认为你无法改变这种行为

然而,让NH像往常一样工作(检索null)并将其包装到域模型中通常更容易


但从我看到的情况来看,您这样做可能是为了表示(数据绑定?)。仅仅公开一个
日期时间不是更容易吗?

我认为可以通过使用实现IPostLoadEventListener的侦听器来实现这种行为。加载实体后,可以检查组件是否为空,如果为空,则可以新建组件。

无论哪种方式,都不能模拟静态方法。您应该注入一个“当前时间”服务。你试图在错误的层次上处理这个问题。我为这个解决方案做了一个概念证明,它是有效的。不过我还没有把它投入生产。