時々、このコードが原因でログ(NHibernate.SQL)に表示されるupdate
トランザクションをコミットするときにsqlがエンティティをクエリします。NHibernateがget-onlyトランザクションの更新クエリを送信する
using (ISession session = SessionFactory.OpenSession())
{
using (session.BeginTransaction())
{
entity = session.Get<E>(id);
session.Transaction.Commit();
}
}
どうしてですか?
スタックトレース:
at NHibernate.AdoNet.Util.SqlStatementLogger.LogCommand(String message, IDbCommand command, FormatStyle style) in p:\nhibernate-core\src\NHibernate\AdoNet\Util\SqlStatementLogger.cs:line 56
at NHibernate.AdoNet.AbstractBatcher.ExecuteNonQuery(IDbCommand cmd) in p:\nhibernate-core\src\NHibernate\AdoNet\AbstractBatcher.cs:line 191
at NHibernate.AdoNet.NonBatchingBatcher.AddToBatch(IExpectation expectation) in p:\nhibernate-core\src\NHibernate\AdoNet\NonBatchingBatcher.cs:line 40
at 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) in p:\nhibernate-core\src\NHibernate\Persister\Entity\AbstractEntityPersister.cs:line 2776
at 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) in p:\nhibernate-core\src\NHibernate\Persister\Entity\AbstractEntityPersister.cs:line 2702
at NHibernate.Persister.Entity.AbstractEntityPersister.Update(Object id, Object[] fields, Int32[] dirtyFields, Boolean hasDirtyCollection, Object[] oldFields, Object oldVersion, Object obj, Object rowId, ISessionImplementor session) in p:\nhibernate-core\src\NHibernate\Persister\Entity\AbstractEntityPersister.cs:line 2957
at NHibernate.Action.EntityUpdateAction.Execute() in p:\nhibernate-core\src\NHibernate\Action\EntityUpdateAction.cs:line 79
at NHibernate.Engine.ActionQueue.Execute(IExecutable executable) in p:\nhibernate-core\src\NHibernate\Engine\ActionQueue.cs:line 136
at NHibernate.Engine.ActionQueue.ExecuteActions(IList list) in p:\nhibernate-core\src\NHibernate\Engine\ActionQueue.cs:line 125
at NHibernate.Engine.ActionQueue.ExecuteActions() in p:\nhibernate-core\src\NHibernate\Engine\ActionQueue.cs:line 171
at NHibernate.Event.Default.AbstractFlushingEventListener.PerformExecutions(IEventSource session) in p:\nhibernate-core\src\NHibernate\Event\Default\AbstractFlushingEventListener.cs:line 241
at NHibernate.Event.Default.DefaultFlushEventListener.OnFlush(FlushEvent event) in p:\nhibernate-core\src\NHibernate\Event\Default\DefaultFlushEventListener.cs:line 20
at NHibernate.Impl.SessionImpl.Flush() in p:\nhibernate-core\src\NHibernate\Impl\SessionImpl.cs:line 1507
at NHibernate.Transaction.AdoTransaction.Commit() in p:\nhibernate-core\src\NHibernate\Transaction\AdoTransaction.cs:line 193
が更新プロパティには、次のようになります。
public virtual MyEnum MyProperty { get; set; }
とinteger not null
データベース列にマップされます。
私は、プロパティが列挙型であり、 'not null'カラムにマップされているという質問に含まれています。 enum-integerの会話はそれを引き起こすことができますか? – Vlad
db値とそのenumのC#値が何であるかを確認 –
db値は1で、C#enum値はそれに対応します。 – Vlad