2015-04-03 69 views
0

I am a newbie to programming Windows forms application. I am stuck with an error for the past 2 days. I had a method添加()`在Base DAO层NHibernate.AssertionFailure做transaction.Commit()是什么意思?

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。映射{

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

}

+0

什么例外? – JonasCz 2015-04-03 11:42:02

+0

AssertionFailure在RKG.SCM.DomainObjects.MarketScenario条目中未处理的空ID(在发生异常后不刷新会话) – Arya 2015-04-03 11:44:01

回答

0

这将是有益的,如果你能告诉你的MarketScenario实体类代码和它的映射(xhbm或流利或任何你使用)。

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

当然,这取决于您想使用的身份生成策略。我认为你应该多介绍一下这个实体和它的标识栏。

+0

MarketScenario实体类代码及其映射已添加到编辑的问题中。 – Arya 2015-04-06 07:34:49

+0

这似乎有点奇怪。也许主键不是问题。你可以调查一下你的例外吗? .NET例外中经常有有用的属性和堆栈跟踪。尝试发布您的例外的图片或文本转储,以便可以调查您的问题。 – mkarczewski 2015-04-07 08:02:26