【问题标题】:What does NHibernate.AssertionFailure on doing transaction.Commit() mean?NHibernate.AssertionFailure 在执行 transaction.Commit() 时是什么意思?
【发布时间】:2015-04-06 15:31:56
【问题描述】:

Base DAO 层中的I am a newbie to programming Windows forms application. I am stuck with an error for the past 2 days. I had a methodAdd()`

public virtual void Add(T entity)
{
    try
    {
        DomainObject domObj = entity as DomainObject;
        if (domObj != null)
        {
            domObj.CreatedDate = domObj.LastModifiedDate = DateTime.Now.ToUniversalTime();
        }

        using (ITransaction transaction = GetTransaction)
        {
            _session.Save(entity);
            //******* _session.SaveOrUpdate(entity);
            // _session.Refresh(entity);
            //transaction.Commit();

        }
    }

我尝试将transaction.Commit() 移动到 Base DAO 层中的单独方法中。

public virtual void Commit(T entity)
{
    using (ITransaction transaction = GetTransaction)
    {
        transaction.Commit();
    } 
}

我已经对其余的层进行了相应的更改。现在,当我运行应用程序并将数据输入表单时,我得到了这个异常(NHibernate.AssertionFailure)。请帮忙。

这是 MarketScenario 实体类代码:

namespace RKG.SCM.ModelObjects

{ 公共类 MarketScenarioModel { 公共 MarketScenarioModel() { }

    public MarketScenarioModel(string selectedMarketIds) 
    {
        this.MarketIdList = selectedMarketIds;
    }

    public virtual int Id { get; set; }
    public virtual ScenarioModel ScenarioModel { get; set; }
    public virtual string MarketIdList { get; set; }
}

} 这是 MarketScenario NHibernate 映射:

命名空间 RKG.SCM.NHibernate.Mappings {

public class MarketScenarioMap : ClassMap<MarketScenario> {

    public MarketScenarioMap() {
        Table("market_scenario");
        LazyLoad();
        Id(x => x.Id).GeneratedBy.Identity().Column("id");
        References(x => x.Scenario).Column("scenario_id");
        Map(x => x.MarketIdList).Column("market_id_list");
    }
}

}

【问题讨论】:

  • AssertionFailure was unhandled null id in RKG.SCM.DomainObjects.MarketScenario entry(发生异常后不要刷新Session)

标签: c# nhibernate


【解决方案1】:

如果您能显示您的 MarketScenario 实体类代码及其映射(xhbm 或 fluent 或任何您使用的),将会很有帮助。

看起来它的主键不是标识(自动生成),并且您尝试使用空 Id 保存对象。如果它是一个身份列,那就没问题了。

当然,这取决于您想使用哪种身份生成策略。我认为你应该告诉我们更多关于这个实体及其身份列的信息。

【讨论】:

  • MarketScenario实体类代码及其映射已添加到编辑的问题中。
  • 好像有点奇怪。也许主键不是问题。你能调查一下你的异常吗? .NET 异常中通常有有用的属性和堆栈跟踪。尝试发布您的异常的图片或文本转储,以便调查您的问题。
猜你喜欢
  • 2012-12-11
  • 2023-03-04
  • 1970-01-01
  • 2011-08-12
  • 2017-06-11
  • 2018-03-05
  • 2023-03-27
  • 1970-01-01
  • 2013-09-29
相关资源
最近更新 更多