c# - EFCore 3 - 保存项目抛出 sql 异常“无法更新标识列”
问题描述
我正在.net Core 3.0 中处理 Entity Framework Core 3.0 但是当我尝试更新这个项目(只有这个类,在一个 db first 模型中)它给了我这个错误
Sql 异常。无法更新身份列“IDNRR”
我只是从 X 表中获取一个项目,然后使用 context.Update 命令保存它
单元测试异常
var c = _dbContext.TblWoTaskExtServices.SingleOrDefault(x => x.Idnrr == 15273778);
_dbContext.Update(c);
_dbContext.SaveChanges(); -> execute this give me the sql exception
类定义
modelBuilder.Entity<TblWoTaskExtServices>(entity =>
{
entity.HasKey(e => new { e.ExternalServiceCode, e.IdWotask });
entity.ToTable("tbl_WO_TASK_EXT_SERVICES");
entity.HasIndex(e => e.Idnrr)
.HasName("IX_tbl_WO_TASK_EXT_SERVICES")
.IsUnique();
entity.Property(e => e.ExternalServiceCode)
.HasMaxLength(255)
.IsUnicode(false);
entity.Property(e => e.IdWotask).HasColumnName("IdWOTask");
entity.Property(e => e.DateIns).HasColumnType("smalldatetime");
entity.Property(e => e.DateMod).HasColumnType("smalldatetime");
entity.Property(e => e.ExternalServiceDescription).HasColumnType("text");
entity.Property(e => e.Idnrr)
.HasColumnName("IDNRR")
.ValueGeneratedOnAdd();
entity.Property(e => e.Notes).HasColumnType("text");
entity.Property(e => e.TotalCost).HasColumnType("decimal(18, 2)");
entity.Property(e => e.TotalCostFinal).HasColumnType("decimal(18, 2)");
entity.HasOne(d => d.IdCompanyNavigation)
.WithMany(p => p.TblWoTaskExtServices)
.HasPrincipalKey(p => p.Idnrr)
.HasForeignKey(d => d.IdCompany)
.OnDelete(DeleteBehavior.ClientSetNull)
.HasConstraintName("FK_tbl_WO_TASK_EXT_SERVICES_tbl_COMPANIES");
entity.HasOne(d => d.IdCostClassNavigation)
.WithMany(p => p.TblWoTaskExtServices)
.HasPrincipalKey(p => p.Idnrr)
.HasForeignKey(d => d.IdCostClass)
.HasConstraintName("FK_tbl_WO_TASK_EXT_SERVICES_tbl_COST_CLASSES");
entity.HasOne(d => d.IdCurrencyNavigation)
.WithMany(p => p.TblWoTaskExtServices)
.HasPrincipalKey(p => p.Idnrr)
.HasForeignKey(d => d.IdCurrency)
.HasConstraintName("FK_tbl_WO_TASK_EXT_SERVICES_tbl_Currencies");
});
}
解决方案
不使用 Update() 方法解决
正如@metacube 建议的那样
此外,您没有更改返回的实体,但在其上使用了 DbContext.Update,这将实体状态更改为“已修改”。我建议只需更改被跟踪实体的所需属性,然后调用 SaveChanges
推荐阅读
- python - 如何读取和请求其中包含 HTML 编码的特殊字符的 XPath(Python、lxml、HTML)
- ios - UISwipeGestureRecognizer 可以用于 UIHostingController 中的视图吗?
- c++ - 使用多个文件对函数的未定义引用
- assembly - 如何使绘图程序在 200x320 像素(而不是 200x255)组件上工作?
- reactjs - react-hook-form isDirty 对我来说似乎很奇怪
- sql-server - 聚类索引新基数算子灾难性估计
- c++ - 使用 bash 连接到 unix-socket
- image - Flutter 图像保存在 iOS 中变得模糊
- javascript - 与 Chorme 相比,为什么在 Firefox 上运行地理定位时会给出更准确的结果
- angularjs - 简单的 AngularJS 路由示例不起作用