Новый столбец EDMX генерирует ошибку при вызове ToList()

Мы добавили новый столбец в таблицу базы данных. Столбец определяется следующим образом:

Name: DisplayAsSoldOut
Type: Boolean
NOT NULLABLE
Default Value: 0

Мы обновили нашу модель данных EDMX, и новый столбец выглядит просто отлично. Мы работаем на платформе ASP.NET 4.0 с использованием С#.

У нас есть класс, определенный как PagedList, который наследуется от List и реализует интерфейс IPagedList.

В PagedList у нас есть следующий метод:

protected void Initialize(IQueryable<T> source, int index, int pageSize, int? totalCount)
{
    if (index < 0)
    { throw new ArgumentOutOfRangeException("PageIndex cannot be below 0."); }

    if (pageSize < 1)
    { throw new ArgumentOutOfRangeException("PageSize cannot be less than 1."); }

    if (source == null)
    { source = new List<T>().AsQueryable(); }

    if (!totalCount.HasValue)
    { TotalItemCount = source.Count(); }

    PageSize = pageSize;
    PageIndex = index;

    if (TotalItemCount > 0)
    { PageCount = (int)Math.Ceiling(TotalItemCount / (double)PageSize); }
    else
    { PageCount = 0; }

    HasPreviousPage = (PageIndex > 0);
    HasNextPage = (PageIndex < (PageCount - 1));
    IsFirstPage = (PageIndex <= 0);
    IsLastPage = (PageIndex >= (PageCount - 1));

    if (TotalItemCount > 0)
    { AddRange(source.Skip((index) * pageSize).Take(pageSize).ToList()); }
}

Когда мы доходим до следующей строки:

{ AddRange(source.Skip((index) * pageSize).Take(pageSize).ToList()); }

мы получаем следующее исключение...

Type: System.Data.EntityCommandExecutionException
Inner Exception: "Invalid column name 'DisplayAsSoldOut'."

Я пытался найти этот тип исключения, но безрезультатно. Столбец отлично отображается в наборе данных EDMX. Я даже создал небольшую одноразовую программу и импортировал EDMX для простого чтения из базы данных, и она работала нормально. Кто-нибудь сталкивался с чем-то подобным?

Прошу прощения за длинное сообщение, но хотел предоставить как можно больше информации.


person Community    schedule 27.01.2011    source источник
comment
Вы пытались удалить таблицу и повторно добавить ее в EDMX?   -  person Theun Arbeider    schedule 28.01.2011
comment
@Theun, да ... к сожалению, не сработало.   -  person    schedule 28.01.2011
comment
Не могли бы вы опубликовать исходный код вашего метода AddRange?   -  person Andrei    schedule 04.02.2011
comment
@ Андрей, функция AddRange - это просто базовый метод AddRange вне типа данных List‹T›.   -  person    schedule 04.02.2011
comment
Ну тогда... У меня была похожая проблема раньше. Вы можете сделать 2 вещи для устранения неполадок (они не связаны друг с другом, но могут помочь вам двигаться в правильном направлении). 3. Попробуйте переименовать столбец, просто так. | Надеюсь, что это поможет вам. 1. Создайте новую модель EF с нуля только с нужными вам таблицами. Запустите свой код для модели. Посмотрите, что происходит. 2. Удалите стол из существующей модели. Сохранять. Закройте ВС. Запустите ВС. Откройте модель. Добавьте таблицу еще раз. Сохранять. Строить. (мне это помогло).   -  person Andrei    schedule 04.02.2011
comment
3. Попробуйте переименовать столбец, просто так. | Надеюсь, что некоторые из них помогут вам.   -  person Andrei    schedule 04.02.2011


Ответы (1)


У меня была аналогичная проблема, связанная с тем, что файл edmx был неправильно исправлен вручную.

Эти файлы немного сложно редактировать, поэтому, чтобы выяснить, что не так, я сделал резервную копию, удалил и снова добавил весь Model.edmx и Model.designer.cs.

Затем с помощью старого доброго winmerge я сравнил два набора файлов и понял, что не так. Это было настолько эзотерично, что я не могу вспомнить подробности, но я думаю, что это была дополнительная или отсутствующая запись в одном из разделов EDMX.

person Richard Harrison    schedule 06.02.2011