Nhibernate将id = 0存储为null
我对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
这里的问题是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映射概述(文章的后半部分)