Bir depo model yaklaşımı olan bir EF 6 projem var. Benim diğer projedeC# - IQueryable toList Async - EF6
private readonly DbContext _ctx = new SomeDbContext();
public IQueryable<TEntity> GetAll(bool noTracking = false)
{
return !noTracking ? _ctx.Set<TEntity>() : _ctx.Set<TEntity>().AsNoTracking();
}
, o benim kendi ToListAsync uzatma yöntemi yaptık, sadece depo projesi erişmek, işle ilgili ve EntityFramework.dll için herhangi bir referans yoktur.
O T nesnenin IQueryable deposundan dönen alır vepublic static async Task<IList<T>> ToListAsync<T>(this IQueryable<T> query)
{
return await new Task<IList<T>>(query.ToList);
}
Kullanımı T. bir Listesine uyumsuz dönüştürür:
await GetAll(true).Where(<some predicate>).ToListAsync();
şeydir, sadece değil iş. Debbuger uzantı yöntemine basıp iletmeye çalıştığında, hata ayıklamayı durdurur, hata yoktur, istisna yoktur, yalnızca uygulamayı tamamen durdurur.
Görevin nasıl oluşturulduğunu değiştirmeyi denedim, ancak ilerleme yok.
Bu neden oluyor?
Teşekkürler.
GÜNCELLEME:
Ben uzatma yöntemi değiştirdik ve görünüşte çalıştı Taşıyamazsınız, garip bir davranış hala var.
Genişletme yöntemleri yalnızca ben ayrıştırdığımda veya zaman uyumsuz olarak çağırmıyorsa çalışır, serbestçe çalışmasına izin verirse, hata ayıklayıcı/uygulama çıkar, daha fazla kod yürütmez.
İşleri:
Bütün bu testler bir konsol uygulaması yapılan ediliyordu:
var x = repo.GetAll(true).ToListAsync().Result;
var x = await repo.GetAll(true).ToListAsync();
GÜNCELLEME 2 değil işleri (uygulama sadece çıkar) Does Bu nedenle, async yöntemiyle wait
gereklidir, aksi halde çıkar.
MethodX().Wait();
Neden EF'nin asenkron yöntemlerini depoda kullanmıyorsunuz? –
"IQueryable" işlevinden "Görev >" yerine depo yöntemlerinin dönüş türünü değiştirmem gerekir. İş katmanımda, sorguyu bir listeye ne zaman dönüştüreceğimi ve her zaman bir liste döndürmediğimi seçme esnekliğine sahip olmak istiyorum. Bazen sadece IQueryable'a ihtiyacım var.Ama daha fazla zaman almanın ne olduğunu bilmiyorum: bir veritabanını sorgulamak veya sonuçları bir Listeye yansıtmak. –
MurariAlex