Подтвердить что ты не робот

Entity Framework. Просмотр возвратных дубликатов записей

Я использую Entity Framework, который содержит представление. И у меня есть запрос:

var data = this.context.vwRevenues
    .Where(x => x.revenue >= 0);
    .OrderByDescending(x => x.year)
    .ThenByDescending(x => x.month)
    .Take(10)
    .ToList();

Этот запрос возвращает набор объектов, но 1-й объект равен 5-м.

data[0] == data[4] // true

Я беру sql script для этого запроса из sql tracer и запускаю его в SQL Management Studio, он возвращает разные записи.

4b9b3361

Ответ 1

В соответствии с @Giovane Ответ

У нас была та же проблема в нашей системе с Entity Framework, которая касается представлений. Попробуйте использовать ROW_NUMBER() OVER() SQL, чтобы создать столбец с уникальными значениями, но не работал.

Я сделал то же самое, но чтобы он работал, мне нужно открыть модель EDMX, а затем выбрать этот столбец как Entity Key.

enter image description here

Тогда он будет работать

Есть очень хорошая статья об этом

Дублирующие записи

Самые важные статьи:

При включении представления в вашу модель сущности модель, похоже, просто использует первые столбцы с недействительными значениями как первичный ключ (так как все столбцы, используемые в первичном ключе, должны быть недействительными).

Ответ 2

Вам нужно только сделать: context.viewname.AsNoTracking().Where(x => x.ColumnName != null);

Ответ 3

У нас была та же проблема в нашей системе с Entity Framework, которая касается представлений. Попробуйте использовать ROW_NUMBER() OVER() SQL, чтобы создать столбец с уникальными значениями, но не сработал.

Нам нужно вставить поле больше, FK для другой таблицы в представлении, чтобы он мог добавить в качестве дополнительного обучения для mebro EntityKeyMembers Elimite и, следовательно, проблему повторения.

Таким образом, если проблема сохраняется в подобной ситуации, решение заключается в том, чтобы вставить столбец FK, чтобы он был ЧЕМПИОНАМИ полей, которые формируют EntityKey таблицы.

Ответ 4

В представлении попробуйте преобразовать первую запись в ненулевое значение, например:

isnull(ROW_NUMBER() OVER (ORDER BY "Column"), 0) AS Row

Он указывает на Entity Framework, который может быть основным ключом автоматически.

Ответ 5

Если вы не хотите обновлять edmx и устанавливать любой ключ в столбце &&

если вы не хотите обновлять запись о просмотре (только для получения записи), используйте ниже код, который работает для меня.

context.viewname.MergeOption = System.Data.Objects.MergeOption.NoTracking;

context.viewname.Where(x => x.columnname != null);