NHibernate.AssertionFailure在做transaction.Commit()意味着什么?

时间:2015-04-03 11:35:46

标签: c# nhibernate

I am a newbie to programming Windows forms application. I am stuck with an error for the past 2 days. I had a method在基础DAO层中添加()`

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     {         public 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");
    }
}

}

1 个答案:

答案 0 :(得分:0)

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

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

当然,这取决于您想要使用的身份生成策略。我想你应该多告诉我们这个实体及其标识栏。