Nhibernate将id = 0存储为null

时间:2014-05-23 10:49:35

标签: c# nhibernate fluent-nhibernate

我对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保存或更新Parent时(先前从db通过nHibernate引入),nHibernate存储null而不是value。

有什么建议吗?

nHibernate 3.3.1.4000 流利1.4.0.0

1 个答案:

答案 0 :(得分:5)

这里的问题是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 (可选 - 默认为"敏感"值):标识符属性值,指示实例是新实例化的(未保存) ,将其与在先前会话中保存或加载的瞬态实例区分开来。

Adam Bar (文章的后半部分)

这是一个很好的Id mapping概述
相关问题