4

1 つのクエリで .Contains と ToFuture() メソッドを使用しようとすると、「指定されたキーが辞書に存在しませんでした」という「System.Collections.Generic.KeyNotFoundException」が常に発生します。

DBObject に一連のプロパティが含まれており、そのうちの 1 つが整数の「ID」であると想像してください。

List<int> test = new List<int>();
        test.Add(1557);
        test.Add(1558);
        test.Add(1559);

        IEnumerable<DBObject> test2 = getLinqQuerySomehow<DBObject>().Where(x => test.Contains(x.ID)).ToFuture();
        List<DBObject> results = test2.ToList();

誰でもこれを再現できますか?Linq-to-Nhibernate が ToFuture() を使用しながら、テスト リストの int に SQL IN 句を使用するようにする、contains() 以外の別の方法を知っている人はいますか?

スタックトレース:

d:\CSharp\NH\NH\nhibernate\src\NHibernate\Param\NamedParameterSpecification.cs: NHibernate.Param.ParametersBackTrackExtensions.ResetEffectiveExpectedType(IEnumerable`1 parameterSpecs, QueryParameters queryParameters) の 70 行目 d:\CSharp\NH\NH\nhibernate\src\NHibernate\Param\ParametersBackTrackExtensions.cs: NHibernate.Hql.Ast の 48 行目。 ANTLR.Loader.QueryLoader.ResetEffectiveExpectedType(IEnumerable`1 parameterSpecs, QueryParameters queryParameters) in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Hql\Ast\ANTLR\Loader\QueryLoader.cs:line 428 at NHibernate.Loader .Loader.CreateSqlCommand(QueryParameters queryParameters, ISessionImplementor session) in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Loader\Loader.cs:d:\CSharp\NH\NH\nhibernate\src\NHibernate\Impl\MultiQueryImpl の NHibernate.Impl.MultiQueryImpl.AggregateQueriesInformation() の行 1649 .cs: NHibernate.Impl.MultiQueryImpl.get_Parameters() の 641 行目 d:\CSharp\NH\NH\nhibernate\src\NHibernate\Impl\MultiQueryImpl.cs: NHibernate.Impl.MultiQueryImpl.CreateCombinedQueryParameters() の 774 行目d:\CSharp\NH\NH\nhibernate\src\NHibernate\Impl\MultiQueryImpl.cs:d:\CSharp\NH\NH\nhibernate\src\NHibernate\Impl の NHibernate.Impl.MultiQueryImpl.List() の 754 行目\MultiQueryImpl.cs: NHibernate.Impl.FutureQueryBatch.GetResultsFrom(IMultiQuery multiApproach) の 400 行目 d:\CSharp\NH\NH\nhibernate\src\NHibernate\Impl\FutureQueryBatch.cs: NHibernate.Impl.FutureBatch の 24 行目2.d の GetResults():\CSharp\NH\NH\nhibernate\src\NHibernate\Impl\FutureBatch.cs:d:\CSharp\NH\NH\nhibernate\src\NHibernate\Impl の NHibernate.Impl.FutureBatch`2.get_Results() の 73 行目\FutureBatch.cs: NHibernate.Impl.FutureBatch`2.GetCurrentResult[TResult](Int32 currentIndex) の 29 行目 d:\CSharp\NH\NH\nhibernate\src\NHibernate\Impl\FutureBatch.cs: NHibernate の 79 行目.Impl.FutureBatch`2.c__DisplayClass4`1.b__3() in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Impl\FutureBatch.cs: NHibernate.Impl.DelayedEnumerator`1.d__0.MoveNext の 63 行目() in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Impl\DelayedEnumerator.cs:line 26 at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection) at System.Linq. C の TestProject1.UnitTest1.TestMethod1() での Enumerable.ToList[TSource](IEnumerable`1 ソース):\checkout\Library Projects\BaseSystemCore\TestProject1\UnitTest1.cs:94行目
4

1 に答える 1

2

これはバグです。Nhibernate issue tracker で見つけました。

https://nhibernate.jira.com/browse/NH-2897

編集:NH 4.0で修正する必要があります。

于 2012-01-04T01:52:07.347 に答える