У меня есть база данных SQL, с таблицей, состоящей из нескольких столбцов, со столбцом user_id, установленным в качестве PK и идентификатора.
Это код таблицы:
CREATE TABLE [dbo].[Users] (
[user_id] INT IDENTITY (1, 1) NOT NULL,
[firstname] NVARCHAR (25) NOT NULL,
[lastname] NVARCHAR (25) NOT NULL,
[title] NVARCHAR (10) NOT NULL,
[email] NVARCHAR (50) NOT NULL,
[password] NVARCHAR (255) NOT NULL,
CONSTRAINT [PK_Users] PRIMARY KEY CLUSTERED ([user_id] ASC)
);
При попытке сохранить новый объект в БД выдается ошибка
SqlException: Cannot insert explicit value for identity column in table
'Users' when IDENTITY_INSERT is set to OFF.
Сохраняемый объект не получает 'user_id'.
DBContext для'user_id':
entity.Property(e => e.UserId).HasColumnName("user_id");
и был автоматически сгенерирован EFCorePowerTools.
Фактический класс пользователя имеет свойство 'UserID', которое связано с 'user_id' в DBContext.
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity), Key]
public int UserId { get; set; }
Идея состоит в том, чтобы позволить SQL DB обрабатывать генерацию ключей.
Вставка вручную через запросы работает отлично, поэтому проблема должна заключаться в реализации EF.
До сих пор я пытался:
Сделать 'UserID' в 'User' обнуляемым,
Имея только '[DatabaseGeneratedAttribute (DatabaseGeneratedOption.Identity)] в качествеаннотация для 'UserID'
Переделка базы данных, а затем повторная обработка DBContext
По какой-то причине, даже когда 'UserID' в 'User' аннотируется с помощью [NotMapped], я получаюта же ошибка, которая заставляет меня поверить, что есть проблема в фактической привязке DBContext.
Вот полный DBContext для 'Users':
modelBuilder.Entity<User>(entity =>
{
entity.Property(e => e.UserId).HasColumnName("user_id");
entity.Property(e => e.Email)
.IsRequired()
.HasColumnName("email")
.HasMaxLength(50);
entity.Property(e => e.Firstname)
.IsRequired()
.HasColumnName("firstname")
.HasMaxLength(25);
entity.Property(e => e.Lastname)
.IsRequired()
.HasColumnName("lastname")
.HasMaxLength(25);
entity.Property(e => e.Password)
.IsRequired()
.HasColumnName("password")
.HasMaxLength(255);
entity.Property(e => e.Title)
.IsRequired()
.HasColumnName("title")
.HasMaxLength(10);
});
И весь класс 'User':
public partial class User : DomainAppBase, IStorable
{
public User()
{
Leads = new HashSet<Lead>();
}
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int UserId { get; set; }
public string Firstname { get; set; }
public string Lastname { get; set; }
public string Title { get; set; }
public string Email { get; set; }
public string Password { get; set; }
public override void SetDefaultValues()
{
UserId = NullKey;
}
[NotMapped]
public ICollection<Lead> Leads { get; set; }
[NotMapped]
public new int Key => UserId;
}
Буду очень признателен за любую помощь или указатели.Заранее спасибо.