Код сначала - не может вставить значение 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)]
решило проблему.
Ответы
Ответ 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; }
}
Ключ здесь заключается в установке атрибутов:
в столбец идентификатора. По-видимому, проблема, с которой мы сражаемся, заключается в том, что Entity Framework по умолчанию ожидает вставки с ключами, являющимися тождествами.
Ответ 3
Я исправил это, установив StoreGeneratedPattern
в свойствах столбца на Computed
.
Шаг за шагом:
- Откройте свой EDMX (двойной клик в Visual Studio)
- Щелкните правой кнопкой мыши на столбце, который вызывает проблему, выберите свойства.
- Измените
StoreGeneratedPattern
на Computed
.
![From the IDE]()
![enter image description here]()
Надеюсь, что кто-то поможет.