C# 在执行transaction.Commit()时NHibernate.AssertionFailure意味着什么?

C# 在执行transaction.Commit()时NHibernate.AssertionFailure意味着什么?,c#,nhibernate,C#,Nhibernate,我是编写Windows窗体应用程序的新手。在过去的两天里,我遇到了一个错误。我在基本DAO层中有一个方法Add() public virtual void Add(T entity) { try { DomainObject domObj = entity as DomainObject; if (domObj != null) { domObj.CreatedDate = domObj.LastModifi

我是编写Windows窗体应用程序的新手。在过去的两天里,我遇到了一个错误。我在基本DAO层中有一个方法
Add()

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()
移动到基本DAO层中的一个单独的方法中

public virtual void Commit(T entity)
{
    using (ITransaction transaction = GetTransaction)
    {
        transaction.Commit();
    } 
}
我在其余的层中做了相应的更改。现在,当我运行应用程序并在表单中输入数据时,我得到了这个异常(NHibernate.AssertionFailure)。请帮忙

这是MarketScenario实体类代码:

namespace RKG.SCM.ModelObjects
{ 公共类市场情景模型 { public MarketScenarioModel(){}

} 这是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");
    }
}
公共类MarketScenarioMap:ClassMap{
公共市场场景图(){
表(“市场情况”);
懒散的负荷();
Id(x=>x.Id).GeneratedBy.Identity()列(“Id”);
参考(x=>x.Scenario).Column(“Scenario_id”);
Map(x=>x.MarketIdList).列(“市场id列表”);
}
}

}

如果您可以显示您的MarketScenario实体类代码及其映射(xhbm或fluent或您使用的任何东西),这将非常有用

看起来它的主键不是identity(自动生成),您尝试用空Id保存对象。如果它是identity列,则可以


当然,这取决于您希望使用的标识生成策略。我认为您应该告诉我们有关此实体及其标识列的更多信息。

AssertionFailure是RKG.SCM.DomainObjects.MarketScenario条目中未处理的空id(发生异常后不要刷新会话)MarketScenario实体类代码及其映射已添加到已编辑的问题中。这似乎有点奇怪。可能主键不是问题。您能稍微调查一下您的异常吗?在.NET异常中通常有有用的属性和堆栈跟踪。请尝试发布异常的图片或文本转储,以便它可能被删除我想调查一下你的问题。
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");
    }
}