NHibernate.AssertionFailure:null标识符 [英] NHibernate.AssertionFailure: null identifier
问题描述
在我将计算机踢到下周之前...
我已经检查过关于此的所有其他问题,但是他们都没有解决方案。我已经剥离了这个代码,但它仍然无法正常工作。
保存对象时出现此错误: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屋!