带有Id的Nhibernate Fluent域对象(x => x.id).GeneratedBy.Assigned不可保存

时间:2009-10-14 14:32:10

标签: nhibernate fluent-nhibernate nhibernate-mapping

我正在为一些遗留数据库使用带有映射的相应域类。 现在,实体的ID由DB中的一些存储过程计算,它返回新行的Id。(它的遗产,我不能改变它) 现在我创建新实体,设置Id和Call Save。但没有任何反应。没有例外。甚至NH Profiler也没有说一点。它作为保存呼叫什么都不做。 我希望NH认为该记录已经在db中,因为它已经有了Id。 但我使用Id(x => x.id).GeneratedBy.Assigned()和intetionally Session.Save(object)方法。

我很困惑。我在那里看到了很多样品。

有没有人对此有任何想法?

public class Appendix
{
    public virtual int id { get; set; }
    public virtual AppendixHierarchy AppendixHierachy { get; set; }
    public virtual byte[] appendix { get; set; }
}       

public class AppendixMap : ClassMap<Appendix>
{
    public AppendixMap ()
    {
        WithTable("appendix");
        Id(x => x.id).GeneratedBy.Assigned();
        References(x => x.AppendixHierachy).ColumnName("appendixHierarchyId");
        Map(x => x.appendix);
    }
}

1 个答案:

答案 0 :(得分:4)

愚蠢的问题,但在很多情况下出现这个问题的原因是:你提交了会话吗? NH缓存更改(调用Save时,尚未发生任何事情),直到强制刷新它或直到您提交会话为止。当您创建自己的ADO连接时,还需要在提交之前调用Flush。