diff --git a/src/NHibernate.Test/Async/LinqBulkManipulation/Fixture.cs b/src/NHibernate.Test/Async/LinqBulkManipulation/Fixture.cs index dd131a898f4..0432aaa74ad 100644 --- a/src/NHibernate.Test/Async/LinqBulkManipulation/Fixture.cs +++ b/src/NHibernate.Test/Async/LinqBulkManipulation/Fixture.cs @@ -1158,6 +1158,18 @@ public async Task DeleteSyntaxWithCompositeIdAsync() } } + [Test] + public async Task DeleteOnFilterThrowsAsync() + { + using (var s = OpenSession()) + using (s.BeginTransaction()) + { + var a = await (s.Query().Take(1).SingleOrDefaultAsync()); + var query = a.AssociatedEntities.AsQueryable(); + Assert.That(() => query.Delete(), Throws.InstanceOf()); + } + } + #endregion } -} \ No newline at end of file +} diff --git a/src/NHibernate.Test/LinqBulkManipulation/Fixture.cs b/src/NHibernate.Test/LinqBulkManipulation/Fixture.cs index 82fa9956909..d39b0ec8d74 100644 --- a/src/NHibernate.Test/LinqBulkManipulation/Fixture.cs +++ b/src/NHibernate.Test/LinqBulkManipulation/Fixture.cs @@ -1199,6 +1199,18 @@ public void DeleteOnProjectionThrows() } } + [Test] + public void DeleteOnFilterThrows() + { + using (var s = OpenSession()) + using (s.BeginTransaction()) + { + var a = s.Query().Take(1).SingleOrDefault(); + var query = a.AssociatedEntities.AsQueryable(); + Assert.That(() => query.Delete(), Throws.InstanceOf()); + } + } + #endregion } -} \ No newline at end of file +} diff --git a/src/NHibernate/Async/Linq/DefaultQueryProvider.cs b/src/NHibernate/Async/Linq/DefaultQueryProvider.cs index e133891a4ef..f07f5c55823 100644 --- a/src/NHibernate/Async/Linq/DefaultQueryProvider.cs +++ b/src/NHibernate/Async/Linq/DefaultQueryProvider.cs @@ -72,12 +72,15 @@ protected virtual Task ExecuteQueryAsync(NhLinqExpression nhLinqExpressi public Task ExecuteDmlAsync(QueryMode queryMode, Expression expression, CancellationToken cancellationToken) { + if (Collection != null) + throw new NotSupportedException("DML operations are not supported for filters."); if (cancellationToken.IsCancellationRequested) { return Task.FromCanceled(cancellationToken); } try { + var nhLinqExpression = new NhLinqDmlExpression(queryMode, expression, Session.Factory); var query = Session.CreateQuery(nhLinqExpression); diff --git a/src/NHibernate/Linq/DefaultQueryProvider.cs b/src/NHibernate/Linq/DefaultQueryProvider.cs index 4f478f9a61c..a23f8ea557b 100644 --- a/src/NHibernate/Linq/DefaultQueryProvider.cs +++ b/src/NHibernate/Linq/DefaultQueryProvider.cs @@ -265,6 +265,9 @@ public virtual void SetResultTransformerAndAdditionalCriteria(IQuery query, NhLi public int ExecuteDml(QueryMode queryMode, Expression expression) { + if (Collection != null) + throw new NotSupportedException("DML operations are not supported for filters."); + var nhLinqExpression = new NhLinqDmlExpression(queryMode, expression, Session.Factory); var query = Session.CreateQuery(nhLinqExpression);