Я только недавно переключил наш репозиторий и контекст с Linq-to-SQL на Entity Framework 4.1 CodeFirst.
В настоящий момент все мои модульные тесты проходят, кроме одного!И именно он проверяет, получаю ли я отчетливый результат из SQL-представления.
var query = worker.ObjectRepository.GetFreeObjects();
query = query.Distinct();
return query;
Когда я проверяю запрос непосредственно перед вызовом .Distinct (), запрос корректен и работает нормально.когда я выполняю его вручную на SQL Server.
Но после того, как я вызову .Distinct()
, запрос будет выглядеть точно так же, как и раньше.
Если я вручную добавлю DISTINCT в свой запрос SQL,это работает нормально, но вызов .Distinct()
в коде не делает этого.
Почему это так?
Редактировать
public IQueryable<SearchResultValueObject> GetFreeObjects()
{
return Get(Context.FreeObjects)
}
public IQueryable<TEntity> Get<TEntity>(IQueryable<TEntity> query)
{
return query;
}
Я просто немного удивился этому сценарию, который является всем, что происходит.Получение данных из контекста и их возврат.
Вот так выглядит мой контекст
public class MyContext : DbContext, IMyContext
{
public virtual DbSet<SearchResultValueObject> SearchResult { get; set; }
IQueryable<SearchResultValueObject> IMyContext.FreeObjects { get { return this.SearchResult; } }
}
Я также пытался удалить все, кроме objectNo, из файла SearchResultMap, я получилрезультаты из БД, но .Distinct()
не сработало.
Edit2
Я сделал простой пример, в котором есть та же проблема: http://pastebin.com/sYVfNb0YЭто как-то связано с тем, что я выбираю из представления?Или я здесь что-то упускаю?
С уважением, Джеспер