Nhibernate将id=0存储为null

本文关键字:存储 null id Nhibernate | 更新日期: 2023-09-27 18:04:50

我有一个小问题与nHibernate(流利)我有两个对象,一个包含另一个-父和子(预定义对象,只读)。

映射:

public class ParentClass
{
    public virtual int Id { get; set; } 
    public virtual ChildClass Metoda { get; set; }
}
public ParentClassMap() {
        Table("Wyceny");
        Id(x => x.Id).Column("Id").GeneratedBy.TriggerIdentity();
        References(x => x.Metoda).Column("RMW_ID");
}
public ChildClass 
{
        public virtual int Id { get; set; }
        public virtual string Nazwa { get; set; }
}
public ChildClassMap()
{
            Table("Metody");
            Id(x => x.Id).Column("Id");
            Map(x => x.Nazwa).Column("Nazwa_met");
}

一切工作完美,直到我选择的子对象id=0,读取仍然适用于id=0,但当我试图保存或更新父与正确的ChildObject(以前通过nHibernate从db读取),nHibernate存储null而不是值。

有什么建议吗?

nHibernate 3.3.1.4000流利1.4.0.0

Nhibernate将id=0存储为null

这里的问题是unsaved-value。NHibernate必须决定对象的操作是插入还是更新。这个决定来自unsaved-value设置,默认情况下int设置为0。

尝试扩展ChildClass的映射:

public ChildClassMap()
{
   Table("Metody");
   Id(x => x.Id)
       .Column("Id")
       .UnsavedValue(-1);
   ...

看到5.1.4。id,引用:

unsaved-value (可选-默认为"sensible"值):标识符属性值,表明实例是新实例化的(未保存),将其与在上一个会话中保存或加载的瞬态实例区分。

下面是Adam Bar的Id映射概述(本文的后半部分)