Stu*_*nar 1 nhibernate nhibernate-mapping fluent-nhibernate
我正在使用Repo模式,并且已经设置了测试以复制传入的HTTP请求,并在测试完成后立即处理工作单元。
看来,在执行HQL语句之后,再调用displose(依次调用flush)之后,会导致各个元素之间的更新。
非常奇怪-之前有人遇到过吗?
这是我的HQL语句及其执行:
_session.CreateQuery("select distinct t from TaskEntity as t").List<T>()
Run Code Online (Sandbox Code Playgroud)
我将其恢复为最简单的形式-请注意,HQL语句并不直接位于CreateQuery中。
这是我得到的堆栈跟踪:
一世
BM.Data.Informix.IfxParameterCollection.b(Int32 A_0)
IBM.Data.Informix.IfxParameterCollection.GetParameter(Int32 index)
System.Data.Common.DbParameterCollection.System.Collections.IList.get_Item(Int32 index)
NHibernate.Type.Int32Type.Set(IDbCommand rs, Object value, Int32 index)
NHibernate.Type.NullableType.NullSafeSet(IDbCommand cmd, Object value, Int32 index)
NHibernate.Type.NullableType.NullSafeSet(IDbCommand st, Object value, Int32 index, ISessionImplementor session)
NHibernate.Persister.Entity.AbstractEntityPersister.Dehydrate(Object id, Object[] fields, Object rowId, Boolean[] includeProperty, Boolean[][] includeColumns, Int32 table, IDbCommand statement, ISessionImplementor session, Int32 index)
NHibernate.Persister.Entity.AbstractEntityPersister.Update(Object id, Object[] fields, Object[] oldFields, Object rowId, Boolean[] includeProperty, Int32 j, Object oldVersion, Object obj, SqlCommandInfo sql, ISessionImplementor session)
NHibernate.Persister.Entity.AbstractEntityPersister.UpdateOrInsert(Object id, Object[] fields, Object[] oldFields, Object rowId, Boolean[] includeProperty, Int32 j, Object oldVersion, Object obj, SqlCommandInfo sql, ISessionImplementor session)
NHibernate.Persister.Entity.AbstractEntityPersister.Update(Object id, Object[] fields, Int32[] dirtyFields, Boolean hasDirtyCollection, Object[] oldFields, Object oldVersion, Object obj, Object rowId, ISessionImplementor session)
NHibernate.Action.EntityUpdateAction.Execute()
NHibernate.Engine.ActionQueue.Execute(IExecutable executable)
NHibernate.Engine.ActionQueue.ExecuteActions(IList list)
NHibernate.Engine.ActionQueue.ExecuteActions()
NHibernate.Event.Default.AbstractFlushingEventListener.PerformExecutions(IEventSource session)
NHibernate.Event.Default.DefaultFlushEventListener.OnFlush(FlushEvent event)
NHibernate.Impl.SessionImpl.Flush()
Case.Data.SQL.NHibernateUnitOfWork.Dispose() in C:\Projects\Case System\Dev\WorkingBranch\Src\Case.Data.SQL\NHibernateUnitOfWork.cs: line 46
Case.Domain.Tests.TaskServicesTests.TakeDown() in C:\Projects\Case System\Dev\WorkingBranch\Src\Case.Domain.Tests\TaskServicesTests.cs: line 40
Run Code Online (Sandbox Code Playgroud)
小智 5
我遇到了类似的问题。我先告诉你是什么原因造成的。当NHibernate从中获取实体时,DB会为其道具分配值。很少有在属性中具有空值DB但Nullable在类定义中不是类型的道具。因此NHibernate为它们分配一个默认值,例如。0对int,DateTime.MinValue对datetime等,当你调用commit的事务,NHibernate重新检查属性的值与DB值,自应该有道具Null值现在有一个默认值,NHibernate认为该值已发生改变,并导致更新。
解:
nullable datatypes通过将其固定在您的课堂道具上来使用,
?但对我来说这会引起其他问题。Not Null类型,但这在大多数情况下不是可取的。Null值中保存值,Db Nhibernate不如保存一些默认值,这将停止对不必要的更新的调用。您可以进一步在Google上搜索NHibernate ghostbuster有关此问题的更多研究。
| 归档时间: |
|
| 查看次数: |
1142 次 |
| 最近记录: |