我正在为一些遗留数据库使用带有映射的相应域类。 现在,实体的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);
}
}
答案 0 :(得分:4)
愚蠢的问题,但在很多情况下出现这个问题的原因是:你提交了会话吗? NH缓存更改(调用Save时,尚未发生任何事情),直到强制刷新它或直到您提交会话为止。当您创建自己的ADO连接时,还需要在提交之前调用Flush。