插入时 NHibernate 组件非空属性

Posted

技术标签:

【中文标题】插入时 NHibernate 组件非空属性【英文标题】:NHibernate Component not-null property when being inserted 【发布时间】:2010-11-13 04:18:16 【问题描述】:

当从数据库中检索时,没有为任何子属性分配值的组件也将被设​​置为 null。

我不介意,这只是额外检查组件是否为空。但是,当我尝试使用 null 组件将该对象更新或插入到数据库中时,出现错误:

“not-null 属性引用了 null 或瞬态 [完整属性名称]”,这似乎很荒谬,NHibernate 怎么会传递给我一个 NULL 但它本身却不接受它。

我是否缺少一些映射选项来覆盖它,或者我真的必须在更新或插入数据库之前将组件设置为一个值?

谢谢

【问题讨论】:

【参考方案1】:

如果所有属性都为null,则在您编写时组件本身为null,这是正常行为。

当您从数据库中获取时,如果您使用带有公共设置器的自动属性,您可能会遇到这种问题。

如果你有这个:

public virtual MyComponent MyComponentObject  get; set;   

你必须这样做:

    private MyComponent _myComponent;
    public virtual MyComponent MyComponentObject 
    
        get
        
            if (ReferenceEquals(null, _myComponent))
            
                _myComponent= new MyComponent();
            
            return _myComponent;
        
        set
        
            _myComponent = value;
        
    

HTH,

克里斯-I,

【讨论】:

是的,我想是的。如果这甚至没有进入我的脑海,自动属性真的让我很懒惰!谢谢 实际上它是组件上设置为 null 的属性,但是 NHibernate 每当它返回错误时都是在抱怨组件而不是它的属性之一。刚刚为遇到此问题的任何其他人提到了这一点。

以上是关于插入时 NHibernate 组件非空属性的主要内容,如果未能解决你的问题,请参考以下文章

从 QueryOver(或者 Fluent NHibernate)中获取魔法字符串?

NHibernate教程(19) —— 一级缓存

Nhibernate学习教程-- 第一个NHibernate程序

nhibernate教程--条件查询(Criteria Query)

NHibernate3剖析:Query篇之NHibernate.Linq增强查询

具有多个结果集的NHibernate存储过程[重复]