保守を担当するビジネスアプリケーションがあり、この断続的なエラーが新しいコメントの作成に関してポップアップし続けます。私はついにそれを引き起こす正確な文字列を取得し、テキストの段落をそれを引き起こす正確な部分にゆっくりと絞り込んだ後、最も基本的なコンポーネントを絞り込みました。しかし、私はどこにでもバンドエイドを適用する以外にそれを修正することはできません。それが一般的な問題であるかどうかを確認し、フィードバックを得ることができるかどうかを確認したいと思いました。
Fluent nHibernate(1.3.0.773)とnHibernate(3.3.1.400)を使用していますが、マッピングファイルも削除したので、これが取得できるほど単純であり、エラーを再現できる理由ではないことを確認してください(ビルドが機能している)。FluentMappings.ExportTo()
これは、構成のダンプに使用した場合のコメントの結果のコンテンツです。
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
<class xmlns="urn:nhibernate-mapping-2.2" name="Core.Comment, Core, Version=5.0.4720.19853, Culture=neutral, PublicKeyToken=null" table="tblComments">
<id name="CommentId" type="System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<column name="CommentId" />
<generator class="guid.comb" />
</id>
<property name="OwnerId" type="System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<column name="OwnerId" />
</property>
<property name="Text" type="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<column name="Description" />
</property>
</class>
</hibernate-mapping>
非常に単純ですが、送信されるテキストにアポストロフィが含まれている場合、更新という単語の後に閉じ括弧が続くArgumentOutOfRangeException
と、トランザクションをコミットしようとするとエラーが発生します。
次の文字列が問題を引き起こします
- Lorem ipsum dolorは、アメット、consecteturに座ります。(これは更新されません)
- どちらも更新しません)
- 'アップデート)
これらは問題を引き起こしません
- Lorem ipsum dolorは、アメット、consecteturに座ります。(これは更新されます)
- アップデート)
- 'アップデート
- 'updat)
あなたが与えることができるどんな洞察も素晴らしいでしょう。
更新: nHibernate Profilerをこれに接続したとき、新しいレコードの挿入に関連して生成されたSQLはありませんでした。だから私はそれがnHibernate内のある種のロジックからのものだと思いますか?
スタックトレース
[ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index]
System.ThrowHelper.ThrowArgumentOutOfRangeException() +72
System.Collections.Generic.List`1.get_Item(Int32 index) +34
NHibernate.AdoNet.Util.FormatProcess.CloseParen() +141
NHibernate.AdoNet.Util.FormatProcess.Perform() +452
NHibernate.AdoNet.Util.BasicFormatter.Format(String source) +67
NHibernate.AdoNet.SqlClientBatchingBatcher.AddToBatch(IExpectation expectation) +310
NHibernate.Persister.Entity.AbstractEntityPersister.Insert(Object id, Object[] fields, Boolean[] notNull, Int32 j, SqlCommandInfo sql, Object obj, ISessionImplementor session) +914
NHibernate.Persister.Entity.AbstractEntityPersister.Insert(Object id, Object[] fields, Object obj, ISessionImplementor session) +341
NHibernate.Action.EntityInsertAction.Execute() +371
NHibernate.Engine.ActionQueue.Execute(IExecutable executable) +48
NHibernate.Engine.ActionQueue.ExecuteActions(IList list) +128
NHibernate.Engine.ActionQueue.ExecuteActions() +35
NHibernate.Event.Default.AbstractFlushingEventListener.PerformExecutions(IEventSource session) +156
NHibernate.Event.Default.DefaultFlushEventListener.OnFlush(FlushEvent event) +180
NHibernate.Impl.SessionImpl.Flush() +295
NHibernate.Transaction.AdoTransaction.Commit() +189
Web.Filters.NHibernateActionFilter.OnActionExecuted(ActionExecutedContext filterContext) in c:\Development\[Project Folder]\Web.Controllers\Filters\NHibernateActionFilter.cs:82
System.Web.Mvc.Async.<>c__DisplayClass4f.<InvokeActionMethodFilterAsynchronously>b__49() +354
System.Web.Mvc.Async.<>c__DisplayClass4f.<InvokeActionMethodFilterAsynchronously>b__49() +323
System.Web.Mvc.Async.<>c__DisplayClass4f.<InvokeActionMethodFilterAsynchronously>b__49() +323
System.Web.Mvc.Async.<>c__DisplayClass37.<BeginInvokeActionMethodWithFilters>b__36(IAsyncResult asyncResult) +44
System.Web.Mvc.Async.WrappedAsyncResult`1.End() +139
System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +102
System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethodWithFilters(IAsyncResult asyncResult) +74
System.Web.Mvc.Async.<>c__DisplayClass2a.<BeginInvokeAction>b__20() +68
System.Web.Mvc.Async.<>c__DisplayClass25.<BeginInvokeAction>b__22(IAsyncResult asyncResult) +184
System.Web.Mvc.Async.WrappedAsyncResult`1.End() +136
System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +56
System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncResult) +66
System.Web.Mvc.<>c__DisplayClass1d.<BeginExecuteCore>b__18(IAsyncResult asyncResult) +40
System.Web.Mvc.Async.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) +47
System.Web.Mvc.Async.WrappedAsyncResult`1.End() +151
System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +59
System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +40
System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) +68
System.Web.Mvc.Async.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) +47
System.Web.Mvc.Async.WrappedAsyncResult`1.End() +151
System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +59
System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +40
System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult) +65
System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.EndExecute(IAsyncResult asyncResult) +39
System.Web.Mvc.<>c__DisplayClass8.<BeginProcessRequest>b__3(IAsyncResult asyncResult) +45
System.Web.Mvc.Async.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) +47
System.Web.Mvc.Async.WrappedAsyncResult`1.End() +151
System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +59
System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +40
System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +66
System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result) +38
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +9629708
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +155