当 IDENTITY_INSERT 设置为 OFF 时,无法在表 'Regions' 中插入标识列的显式值



我有一个名为Regions的表,其中有一个自动递增的ID列。当通过我的ASP。NET核心应用程序,我得到这个错误:

当identity_insert设置为OFF时,无法为表"Regions"中的标识列插入显式值。

我知道为什么会发生这种情况,只是不知道如何阻止EF Core将值写入此Id列。我尝试了一些方法来缓解这种情况,但都无济于事。

这是我的模型,dbContextCreateRegions方法。这个表上的主键是RegionId

型号类别:

public partial class RegionsModel
{
[DisplayName("No :")]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int Id { get; set; }
[Key]
public Guid RegionId { get; set; }
[DisplayName("Region Name :")]
public string RegionName { get; set; } = null!;
}

DbContext:

modelBuilder.Entity<RegionsModel>(entity =>
{
entity.Property(e => e.Id).ValueGeneratedNever();
entity.Property(e => e.RegionId).HasDefaultValueSql("(newid())");
entity.Property(e => e.RegionName).HasMaxLength(50);
});

创建区域方法:

public async Task<IActionResult> CreateRegion([Bind("Id,RegionId,RegionName")] RegionsModel regionsModel)
{
if (ModelState.IsValid)
{
_context.Add(regionsModel);
await _context.SaveChangesAsync();
return RedirectToAction(nameof(RegionsIndex));
}
return View(regionsModel);
}

您需要更改两件事

(1(模型类上的数据注释需要是[DatabaseGenerated(DatabaseGeneratedOption.Identity)]:

public partial class RegionsModel
{
[DisplayName("No :")]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
[Key]
public Guid RegionId { get; set; }
[DisplayName("Region Name :")]
public string RegionName { get; set; } = null!;
}

(2(您的OnModelCreating需要将列Id定义为在Add:上设置

modelBuilder.Entity<RegionsModel>(entity =>
{
// set this to "ValueGeneratedOnAdd" 
entity.Property(e => e.Id).ValueGeneratedOnAdd();
entity.Property(e => e.RegionId).HasDefaultValueSql("(newid())");
entity.Property(e => e.RegionName).HasMaxLength(50);
});

它将Id定义为数据库表中的IDENTITY列,并设置EF Core以允许SQL Server添加一个新值";加上";(在表中插入新行时(添加到该列。

最新更新