NHibernate.AssertionFailure:null标识符 [英] NHibernate.AssertionFailure: null identifier

查看:389
本文介绍了NHibernate.AssertionFailure:null标识符的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在我将计算机踢到下周之前...

我已经检查过关于此的所有其他问题,但是他们都没有解决方案。我已经剥离了这个代码,但它仍然无法正常工作。

保存对象时出现此错误:NHibernate.AssertionFailure:null标识符



这是我的映射文件:

  public class OrderMap:BaseMap< Order> 
{
public SalesOrderMap()
{
Id(x => x.Id).Column(OrderId);




$ b $ p $这是实体:

  public class Order 
{
public virtual int Id {get;保护组}
}

这是我的测试代码:

  Order order = new Order(); 
ISession session = SessionFactory.GetCurrentSession();
session.SaveOrUpdate(order); < ----在这行上的例外
session.Flush();

然后砰...它打破了

  [AssertionFailure:null identifier] 
NHibernate.Engine.EntityKey..ctor(Object identifier,String rootEntityName,String entityName,IType identifierType,Boolean batchLoadable,ISessionFactoryImplementor factory,EntityMode entityMode)+135
NHibernate.Engine.EntityKey..ctor(Object id,IEntityPersister persister,EntityMode entityMode)+70
NHibernate.Event.Default.AbstractSaveEventListener.PerformSaveOrReplicate(Object entity,EntityKey key,IEntityPersister persister ,布尔useIdentityColumn,对象的东西,IEventSource源,布尔requiresImmediateIdAccess)+545
NHibernate.Event.Default.AbstractSaveEventListener.PerformSave(对象实体,对象id,IEntityPersister持久性,布尔useIdentityColumn,任何东西,IEventSource源,布尔requiresImmediateIdAccess) +322
NHibernate.Event.Default.AbstractSaveEventListener.SaveWithGeneratedId (Object entity,String entityName,Object anything,IEventSource source,Boolean requiresImmediateIdAccess)+130
NHibernate.Event.Default.DefaultSaveOrUpdateEventListener.SaveWithGeneratedOrRequestedId(SaveOrUpdateEvent event)+27
NHibernate.Event.Default.DefaultSaveOrUpdateEventListener.EntityIsTransient (SaveOrUpdateEvent事件)+63
NHibernate.Event.Default.DefaultSaveOrUpdateEventListener.PerformSaveOrUpdate(SaveOrUpdateEvent event)+89
NHibernate.Event.Default.DefaultSaveOrUpdateEventListener.OnSaveOrUpdate(SaveOrUpdateEvent event)+188
NHibernate。 Impl.SessionImpl.FireSaveOrUpdate(SaveOrUpdateEvent event)+259
NHibernate.Impl.SessionImpl.SaveOrUpdate(Object obj)+256

如果有人感兴趣的话,这就是会话工厂的构建:

$ $ $ $ $ $ $ $ $ $ $> ControllerSource.SessionFactory =流利的。 Configure()
.Database(MsSqlConfiguration.MsSql2008.ConnectionString(DataConfig.C onnectionString))
.Mappings(x => x.FluentMappings.Add(typeof(OrderMap)))
.ExposeConfiguration(c => {
c.SetProperty(generate_statistics,false);
c.SetProperty( current_session_context_class,contextClass);
c.SetProperty(cache.use_second_level_cache,false);
c.SetProperty(cache.use_query_cache,false);
c。 SetProperty(connection.release_mode,on_close);
})
.BuildSessionFactory();


解决方案

默认的生成器是Native,对于SQL Server 2008.我敢打赌,你没有在表定义的列上指定标识。


Before I kick my computer in to next week...

I've checked out every other question about this, but none of them have the solution. I've stripped this code right back, but it's still not working.

I'm getting this error when saving an object: NHibernate.AssertionFailure: null identifier

This is my mapping file:

public class OrderMap : BaseMap<Order>
{
    public SalesOrderMap()
    {
        Id(x => x.Id).Column("OrderId");
    }
}

This is the entity:

public class Order
{
    public virtual int Id { get; protected set; }
}

This is my test code:

Order order = new Order();
ISession session = SessionFactory.GetCurrentSession();
session.SaveOrUpdate(order); <----EXCEPTION ON THIS LINE
session.Flush();

And then bang...it breaks with

[AssertionFailure: null identifier]
  NHibernate.Engine.EntityKey..ctor(Object identifier, String rootEntityName, String entityName, IType identifierType, Boolean batchLoadable, ISessionFactoryImplementor factory, EntityMode entityMode) +135
   NHibernate.Engine.EntityKey..ctor(Object id, IEntityPersister persister, EntityMode entityMode) +70
   NHibernate.Event.Default.AbstractSaveEventListener.PerformSaveOrReplicate(Object entity, EntityKey key, IEntityPersister persister, Boolean useIdentityColumn, Object anything, IEventSource source, Boolean requiresImmediateIdAccess) +545
   NHibernate.Event.Default.AbstractSaveEventListener.PerformSave(Object entity, Object id, IEntityPersister persister, Boolean useIdentityColumn, Object anything, IEventSource source, Boolean requiresImmediateIdAccess) +322
   NHibernate.Event.Default.AbstractSaveEventListener.SaveWithGeneratedId(Object entity, String entityName, Object anything, IEventSource source, Boolean requiresImmediateIdAccess) +130
   NHibernate.Event.Default.DefaultSaveOrUpdateEventListener.SaveWithGeneratedOrRequestedId(SaveOrUpdateEvent event) +27
   NHibernate.Event.Default.DefaultSaveOrUpdateEventListener.EntityIsTransient(SaveOrUpdateEvent event) +63
   NHibernate.Event.Default.DefaultSaveOrUpdateEventListener.PerformSaveOrUpdate(SaveOrUpdateEvent event) +89
   NHibernate.Event.Default.DefaultSaveOrUpdateEventListener.OnSaveOrUpdate(SaveOrUpdateEvent event) +188
   NHibernate.Impl.SessionImpl.FireSaveOrUpdate(SaveOrUpdateEvent event) +259
   NHibernate.Impl.SessionImpl.SaveOrUpdate(Object obj) +256

if anyone's interested, this is how the session factory is built:

ControllerSource.SessionFactory = Fluently.Configure()
                .Database(MsSqlConfiguration.MsSql2008.ConnectionString(DataConfig.ConnectionString))
                .Mappings(x => x.FluentMappings.Add(typeof (OrderMap)))
                .ExposeConfiguration(c =>{
                                             c.SetProperty("generate_statistics", "false");
                                             c.SetProperty("current_session_context_class", contextClass);
                                             c.SetProperty("cache.use_second_level_cache", "false");
                                             c.SetProperty("cache.use_query_cache", "false");
                                             c.SetProperty("connection.release_mode", "on_close");
                })
                .BuildSessionFactory();

解决方案

The default generator is Native which will in turn use Identity for SQL Server 2008. My bet is that you don't have identity specified on the column in the table definition.

这篇关于NHibernate.AssertionFailure:null标识符的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆