2014-01-08 4 views
3

Я пытаюсь выполнить тестирование асинхронного метода в EF 6.0.2 с помощью Moq 4.0.10827, и я блокируюсь в том, что кажется проблемой кастинга ,Как выполнить тестирование асинхронных методов Entity Framework с несколькими предложениями

Следующие работает отлично:

public async Task<List<Testimonial>> GetByEventIdAsync(int eventId) 
{ 
    var query = from t in _context.Testimonials 
       orderby t.Ordinal 
       select t; 
    var result = query 
     .ToListAsync() 
     .ConfigureAwait(false); 
    return await result; 
} 

но следующие разрывы (добавлен ИНЕК)

public async Task<List<Testimonial>> GetByEventIdAsync(int eventId) 
{ 
    var query = from t in _context.Testimonials 
       where t.EventId == eventId 
       orderby t.Ordinal 
       select t; 
    var result = query 
     .ToListAsync() 
     .ConfigureAwait(false); 
    return await result; 
} 

Я сделал некоторые отладки и нашел следующую

var q1 = _context.Testimonials; // Type = Castle.Proxies.IDbSet`1Proxy_1 
var q2 = q1.Where(t => t.EventId == eventId); // Type = TestDbAsyncEnumerable`1 (from linked code) 
var q3 = q2.OrderBy(o => o.Ordinal); // Type = System.Linq.EnumerableQuery`1 

Почему класс двойной исчезает? И как мне это исправить?

UPDATE: Я также обнаружил, что если я добавить where назад и удалить orderby, который также работает, так что вопрос, как представляется, наличие нескольких положений.

ответ

2

Наконец нашел ответ here.

IQueryable должен был быть добавлен, как так:

public class TestDbAsyncEnumerable<T> 
    : EnumerableQuery<T>, IDbAsyncEnumerable<T>, IQueryable 
+0

Спасибо за это, я искал в неправильных местах и ​​был на грани полностью потерять его. –

Смежные вопросы