NHibernate组件映射 - Null组件

12 nhibernate fluent-nhibernate

我有一个映射的实体,Matter,它有一个映射的组件,Injury.

伤害的唯一属性是DateOfInjury,这是一个可以为空的日期时间.

当我检索Matter时,如果DateOfInjury为null,则该组件为null.

因此,像这样的事情.伤害.DateOfInjury将抛出.

有人可以解释我是否做了明显的事情导致这种行为?

我原本预计Injury组件会被nHibernate初始化为一个对象,并且DateOfinjury属性为null.

我觉得这会更灵活吗?

And*_*ite 10

我认为这是组件映射的默认行为.组件的NHibernate文档说如果组件的所有元素都为null,则组件本身将为null.

如果组件中只有一个属性,那么将它映射为Matter类上的可为空的DateTime属性可能是有意义的.


Oli*_*ver 5

我也遇到了同样的问题,即期望NHibernate初始化我的组件,即使它的所有成员在DB中都是null.这个实现背后的动机是将关于我的组件的逻辑移动到组件中,而不必处理它是否为null.

感谢这篇文章我的搜索解释为什么我的单元测试失败了组件内部的所有空值都很短.我通过扩展组件类的auto-property ArrivalDay并在分配null时自己分配一个新实例来解决这个问题:

private ArrivalDay _arrivalDay;
public ArrivalDay ArrivalDay
{
    get { return _arrivalDay; }
    set { _arrivalDay = value ?? new ArrivalDay(); }
}
Run Code Online (Sandbox Code Playgroud)

这就像一个魅力,意味着包含类的开销非常小.

  • 这里唯一的问题是:在跟踪组件时,这会给NHibernate带来麻烦.一旦尝试刷新实例,就会得到一个'对象引用未保存的瞬态实例' (5认同)