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

Код сначала - не может вставить значение NULL в столбец "Id"

Это мой код, очень простой...

 var newUser = new User();
        newUser.Id=id;
        newUser.Email = email;
       this.DataContext.Set<User>().Add(newUser);
        this.DataContext.SaveChanges();

Ошибка, которую я получаю, - это sqlexception в this.DataContext.SaveChanges();, заявив, что:

Невозможно вставить значение NULL в столбец "Id", таблица 'xxxxx.dbo.Users'; столбец не допускает нулей. INSERT не работает.

Я отлаживал и обнаружил, что в Id и Email есть значение в newUser this.DataContext.Set<User>().Add(newUser);

Если это так, как значение становится null?

Трассировка стека ошибок:

[DbUpdateException: An error occurred while updating the entries. See the inner exception for details.]
   System.Data.Entity.Internal.InternalContext.SaveChanges() +204
   System.Data.Entity.Internal.LazyInternalContext.SaveChanges() +23
   System.Data.Entity.DbContext.SaveChanges() +20

Я не смог понять или решить эту проблему....

Искренне благодарю любую помощь в этом...

Отношения Арнаб

Решение

Хорошо, спасибо Ладиславу, чтобы указать мне в правильном направлении: Добавление атрибута [DatabaseGenerated(DatabaseGeneratedOption.None)] решило проблему.

4b9b3361

Ответ 1

Ссылаясь на этот пост, кажется, что инфраструктура entity ожидает по умолчанию, что вы вставляете в столбец идентификаторов.

Чтобы решить эту проблему, выполните следующие действия:

modelBuilder.Entity<BOB>()
    .HasKey(p => p.Id)
    .Property(p => p.Id)
    .StoreGeneratedPattern = StoreGeneratedPattern.None;

builder.Entity<BOB>().MapSingleType().ToTable("BOB");

или украсить свой ключ в POCO с помощью

[Key]
[DatabaseGenerated(DatabaseGeneratedOption.None)] //Fixed typo
public Int64 PolicyID { get; set; }

Ответ 2

Я столкнулся с той же проблемой, нашел ваш вопрос, а затем заметил этот Entity Framework 4.1 код-первый KeyAttribute как вопрос не идентичного столбца (у которого есть атрибут который решил мою проблему).

Если вы определяете пользователя как:

public class User
{
    [DataMember, Required, Key, DatabaseGenerated(DatabaseGeneratedOption.None)]
    public long ID { get; set; }

    [DataMember]
    public string Email { get; set; }
}

Ключ здесь заключается в установке атрибутов:

  • Ключ
  • DatabaseGenerated

в столбец идентификатора. По-видимому, проблема, с которой мы сражаемся, заключается в том, что Entity Framework по умолчанию ожидает вставки с ключами, являющимися тождествами.

Ответ 3

Я исправил это, установив StoreGeneratedPattern в свойствах столбца на Computed.

Шаг за шагом:

  • Откройте свой EDMX (двойной клик в Visual Studio)
  • Щелкните правой кнопкой мыши на столбце, который вызывает проблему, выберите свойства.
  • Измените StoreGeneratedPattern на Computed.

From the IDEenter image description here

Надеюсь, что кто-то поможет.