Entity Framework - простая операция дает исключение формата - индекс (отсчитываемый от нуля) должен быть больше или равен нулю

Entity Framework выдает довольно загадочное сообщение об ошибке, когда я пытаюсь выполнить простую операцию добавления.

_context.Users.Add(new User
{
     DateJoined = DateTime.UtcNow
});
_context.SaveChanges();

FormatException:  Index (zero based) must be greater than or equal to zero and less than the size of the argument list.

Пользователь наследует от IdentityUser от Microsoft.AspNet.Identity

Я перепроверил базу данных и модель и не могу определить, какое свойство вызывает проблему. Модели содержат:

  1. целые числа, логические значения и строки — получить значения по умолчанию
  2. одно ненулевое свойство DateTime (DateJoined), которое я предоставляю
  3. одно свойство DateTime, допускающее значение NULL
  4. одно перечисление, которое по умолчанию правильно равно 0
  5. виртуальные ICollections

Я не понимаю, какое свойство вызывает проблему, как я могу узнать более конкретно? Может ли это быть что-то еще? Диалоговое окно исключения не содержит привычной ссылки для просмотра внутреннего исключения.


person parliament    schedule 01.02.2015    source источник
comment
Как вы инициализировали Users в своем классе DbContext?   -  person John Castleman    schedule 01.02.2015
comment
Ну, мой ApplicationDbContext наследует IdentityDbContext<User>, поэтому Users предоставляется в базовом классе public virtual IDbSet<TUser> Users { get; set; }. Я не инициализирую его.   -  person parliament    schedule 01.02.2015
comment
Вы уверены, что ваше предложение относится к контексту Entity Framework, потому что я не понимаю, что вы имеете в виду.   -  person parliament    schedule 01.02.2015
comment
Как первичный ключ пользователя определяется в базе данных?   -  person Jason Boyd    schedule 04.02.2015


Ответы (2)


Чтобы узнать больше о том, что происходит, попробуйте сделать следующее:

1) Добавьте Interceptor, чтобы увидеть базовую операцию базы данных. Из журналов вы можете увидеть команду INSERT и, возможно, увидеть, что происходит, сравнив ее с ограничениями таблицы.

2) Ставим точку останова на SaveChanges и видим отслеживаемые сущности из объекта Context. Убедитесь, что этот пользователь является единственным добавленным объектом и помечен как грязный. Оттуда вы также можете увидеть его свойства

3) В вашей модели отметьте все необязательные свойства как [NonMapped] один за другим. Найдите проблемное свойство таким образом. Если эти свойства унаследованы от базового класса, вы можете пометить их как NonMapped программно в классе конфигурации вашей базы данных.

4) Если ничего из вышеперечисленного не работает, попробуйте использовать LinqPad для вставки (из 1)) и посмотрите, получится ли у вас получить лучшее сообщение об ошибке

Надеюсь это поможет

person slvnperron    schedule 04.02.2015

Попробуйте дать пользователю имя пользователя, например.

_context.Users.Add(new User
{
    UserName = "Bob",
    DateJoined = DateTime.UtcNow
});
_context.SaveChanges();
person gaiazov    schedule 09.02.2015