में IDbAsyncQueryProvider मैं एक डॉट नेट कोर एप्लिकेशन में परीक्षण करने के लिए XUNIT का उपयोग कर रहा हूं।EntityFrameworkCore
मुझे ऐसी सेवा की जांच करने की आवश्यकता है जो आंतरिक रूप से मेरे डेटाकॉन्टेक्स्ट में डीबीसेट पर एसिंक क्वेरी बना रहा हो।
I've seen here जो मजाक कर रहा है कि डीबीसेट असीमित रूप से संभव है।
मेरी समस्या यह है कि IDbAsyncQueryProvider
EntityframeworkCore में उपलब्ध नहीं प्रतीत होता है, जिसका मैं उपयोग कर रहा हूं।
क्या मैं यहां गलत हूं? क्या किसी और को यह काम मिल गया है? https://github.com/aspnet/EntityFramework/blob/dev/src/Microsoft.EntityFrameworkCore/Query/Internal/IAsyncQueryProvider.cs
यह वह जगह है:
(एक लंबा दिन गया, उम्मीद है कि मैं सिर्फ कुछ सरल याद कर रहा हूँ)
संपादित
GitHub पर पूछ के बाद, मैं इस वर्ग इंगित मिला जो मैंने इसे लागू करने की कोशिश में अब तक प्राप्त किया है:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore.Query.Internal;
namespace EFCoreTestQueryProvider
{
internal class TestAsyncQueryProvider<TEntity>: IAsyncQueryProvider
{
private readonly IQueryProvider _inner;
internal TestAsyncQueryProvider(IQueryProvider inner)
{
_inner = inner;
}
IQueryable CreateQuery(Expression expression)
{
return new TestDbAsyncEnumerable<TEntity>(expression);
}
IQueryable<TElement> CreateQuery<TElement>(Expression expression)
{
return new TestDbAsyncEnumerable<TElement>(expression);
}
object Execute(Expression expression)
{
return _inner.Execute(expression);
}
TResult Execute<TResult>(Expression expression)
{
return _inner.Execute<TResult>(expression);
}
IAsyncEnumerable<TResult> ExecuteAsync<TResult>(Expression expression)
{
return Task.FromResult(Execute<TResult>(expression)).ToAsyncEnumerable();
}
Task<TResult> IAsyncQueryProvider.ExecuteAsync<TResult>(Expression expression, CancellationToken cancellationToken)
{
return Task.FromResult(Execute<TResult>(expression));
}
}
internal class TestDbAsyncEnumerable<T> : EnumerableQuery<T>, System.Collections.Generic.IAsyncEnumerable<T>, IQueryable<T>
{
public TestDbAsyncEnumerable(IEnumerable<T> enumerable)
: base(enumerable)
{ }
public TestDbAsyncEnumerable(Expression expression)
: base(expression)
{ }
public IAsyncEnumerator<T> GetAsyncEnumerator()
{
return new TestDbAsyncEnumerable<T>(this.AsEnumerable()).ToAsyncEnumerable();
}
IDbAsyncEnumerator IDbAsyncEnumerable.GetAsyncEnumerator()
{
return GetAsyncEnumerator();
}
IAsyncEnumerator<T> IAsyncEnumerable<T>.GetEnumerator()
{
throw new NotImplementedException();
}
IQueryProvider IQueryable.Provider
{
get { return new TestAsyncQueryProvider<T>(this); }
}
}
}
मैं अब, इस लागू करने के लिए कोशिश की है और विशेष रूप से इन दोनों तरीकों के आसपास कुछ और समस्या आ जाती है:
public IAsyncEnumerator<T> GetAsyncEnumerator()
{
return new TestDbAsyncEnumerable<T>(this.AsEnumerable()).ToAsyncEnumerable();
}
IDbAsyncEnumerator IDbAsyncEnumerable.GetAsyncEnumerator()
{
return GetAsyncEnumerator();
}
मैं आशा करती हूं कि किसी ने मुझसे करने के लिए के रूप में सही दिशा में बात कर सकता है कि मैं क्या कर रहा हूँ गलत।
आप किस नए मुद्दे में शामिल हैं? प्रश्न (और शीर्षक) में नए मुद्दों को जोड़ना चाहिए। –
क्या आपको इसका समाधान मिला? – Dan
@ डैन मैं बिना किसी समाधान के आगे बढ़ रहा था। – Chris