Skip to content

Filtered Entity Dml Update Throws Collection was modified #2710

@gokhanabatay

Description

@gokhanabatay

Hi,
When entity has "Filter Condition" in mapping dml update throws Collection was modified; enumeration operation may not execute.

Mapping:

ApplyFilter<MemberConditionFilter>()

This query fails(async and sync test cases are implemented)

           await session.Query<TxnIssuer>()
                   .Where(x => guids.Contains(x.Guid))
                   .UpdateAsync(x => new TxnIssuer
                   {
                           MrcDailyMoved = "Y",
                           MrcDailyMovedDate = DateTime.Now
                    }).ConfigureAwait(false);

Unit Test Case 1: MultiThread_FilteredEntity_DmlStyleUpdateFails

Integration Test Case 1: MultiThread_DmlStyleQueryUpdateFails

I personally opened some issues about NHibernate Filters and some of them is related with dml style update with filters and I know those bugs are resolved. This issue could be regression.

Stack 1

InvalidOperationException
    Enumerator.MoveNextRare()
    Enumerator.MoveNext()
    BasicExecutor.Execute(QueryParameters parameters, ISessionImplementor session)
    QueryTranslatorImpl.ExecuteUpdate(QueryParameters queryParameters, ISessionImplementor session)
    HQLQueryPlan.PerformExecuteUpdate(QueryParameters queryParameters, ISessionImplementor session)
    SessionImpl.ExecuteUpdate(IQueryExpression queryExpression, QueryParameters queryParameters)
    AbstractQueryImpl2.ExecuteUpdate()
    DefaultQueryProvider.ExecuteDml[T](QueryMode queryMode, Expression expression)
    DmlExtensionMethods.ExecuteUpdate[TSource](IQueryable`1 source, Expression updateExpression, Boolean versioned)
    DmlExtensionMethods.Update[TSource](IQueryable`1 source, Expression`1 expression)

Stack 2

InvalidOperationException
    Enumerator.MoveNextRare()
    Enumerator.MoveNext()
    SelectListIterator`2.MoveNext()
    Enumerable.SelectManyIterator[TSource,TCollection,TResult](IEnumerable`1 source, Func`2 collectionSelector, Func`3 resultSelector)+MoveNext()
    Lookup`2.Create(IEnumerable`1 source, Func`2 keySelector, IEqualityComparer`1 comparer)
    GroupedEnumerable`2.ToArray()
    Buffer`1.ctor(IEnumerable`1 source)
    OrderedEnumerable`1.GetEnumerator()+MoveNext()
    SelectIPartitionIterator`2.MoveNext()
    SelectManySingleSelectorIterator`2.ToArray()
    Enumerable.ToArray[TSource](IEnumerable`1 source)
    ParametersBackTrackExtensions.GetQueryParameterTypes(IEnumerable`1 parameterSpecs, IList`1 sqlQueryParametersList, ISessionFactoryImplementor factory)
    BasicExecutor.Execute(QueryParameters parameters, ISessionImplementor session)
    QueryTranslatorImpl.ExecuteUpdate(QueryParameters queryParameters, ISessionImplementor session)
    HQLQueryPlan.PerformExecuteUpdate(QueryParameters queryParameters, ISessionImplementor session)
    SessionImpl.ExecuteUpdate(IQueryExpression queryExpression, QueryParameters queryParameters)
    AbstractQueryImpl2.ExecuteUpdate()
    DefaultQueryProvider.ExecuteDml[T](QueryMode queryMode, Expression expression)
    DmlExtensionMethods.ExecuteUpdate[TSource](IQueryable`1 source, Expression updateExpression, Boolean versioned)
    DmlExtensionMethods.Update[TSource](IQueryable`1 source, Expression`1 expression)

Image:
image

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions