NHibernate会话更改未持久保存到数据库

时间:2012-01-25 16:35:00

标签: nhibernate fluent-nhibernate persistence

这个问题非常奇怪,因为它适用于我们数据管理器的许多其他地方。出于某种原因,任何新的代码编写如下都不会引发错误,但它不会在数据库中更新。系统内存中的会话看起来是正确的,但是在调用.Commit()时没有进行任何更改。

 using (var scope = new UnitOfWorkScope())
     {
         InsuranceCertificate cert = _certificateRepository.SingleOrDefault(x => x.Id == certId);

         cert.Status = new Enumeration<CertificateStatus>(CertificateStatus.Rejected);
         cert.RejectedDate = DateTime.Now;
         cert.RejectedReason = reason;

         _certificateRepository.Add(cert);

         scope.Commit();
         scope.Complete();
     }

我们正在使用Fluent Nhibernate和Castle Windsor,如果这很重要的话。同样,以前类似于上面的代码按预期工作,但任何新代码都没有。

由于我们直接使用会话,因此我在这个主题上找不到什么帮助。有什么想法吗?

修改

  

log4net日志说明如下:2012-01-24 11:39:13,475 [37] DEBUG NHibernate.Event.Default.AbstractSaveEventListener [(null)]&lt;(null)&gt; - 持久化实例:IDOI.Certificate.Domain.Model.Policy.InsuranceCertificate 2012-01-24 11:39:13,475 [37] DEBUG NHibernate.Event.Default.DefaultSaveOrUpdateEventListener [(null)]&lt;(null)&gt; - 忽略持久化实例2012-01-24 11:39:13,475 [37] DEBUG NHibernate.Event.Default.DefaultSaveOrUpdateEventListener [(null)]&lt;(null)&gt; - 已与会话关联的对象:[IDOI.Certificate.Domain.Model.Policy.InsuranceCertificate#5]

1 个答案:

答案 0 :(得分:1)

看起来你正试图从存储库中获取一个实体,更改它,然后重新添加它。我不确定你的存储库实现,但是在注释中给出调试跟踪,会话已经是已添加到会话中 - 此时它将是更新而不是所需的插入。

尝试:

     using (var scope = new UnitOfWorkScope())
        {
            InsuranceCertificate cert = _certificateRepository.SingleOrDefault(x => x.Id == certId);

            cert.Status = new Enumeration<CertificateStatus>(CertificateStatus.Rejected);
            cert.RejectedDate = DateTime.Now;
            cert.RejectedReason = reason;

            scope.Commit();
            scope.Complete();
        }