c# - 实体框架核心不保存更改(没有主键,一个行表)
问题描述
我有一个遗留数据库,该表只有一行没有主键。当我尝试更新这一行时,什么也没有发生。我搜索了很多,来到了这行代码(dbf.Entry(nextPro).State = EntityState.Modified;)
。当我添加此代码时,出现错误:“无法跟踪'NxtId'类型的实例,因为它没有主键。只能跟踪具有主键的实体类型。”
我无法删除该行并添加一个新行。我无法添加主键。我有唯一的选择以某种方式更新行。
var nextPro = dbf.NxtId.FirstOrDefault();
nextPro.ProductNo = 239071;
dbf.Entry(nextPro).State = EntityState.Modified;
dbf.SaveChanges();
实体:
public partial class NxtId
{
public int? ProductNo { get; set; }
public int? Uid { get; set; }
[Key]
public int? SatCode { get; set; }
}
解决方案
当实体没有密钥时,您无法使用 Entity Framework 跟踪或更改实体。但是,您仍然可以从数据库中读取数据。此外,您可以使用扩展方法运行自定义手动编写的 SQL 查询RelationalDatabaseFacadeExtensions.ExecuteSqlRaw()
。使用它发送一个普通UPDATE
查询,然后再次从数据库中读取实体以获取新值。
dbf.Database.ExecuteSqlRaw($"UPDATE {nameof(NxtId)} SET {nameof(NxtId.ProductNo)} = {{0}}", 239071);
var nextPro = dbf.NxtId.Single();
推荐阅读
- reactjs - 如何使用 Jest & Enzyme 测试子文本组件
- github - 访问 GitHub 私有仓库的信息
- graphics - 用于 LOD 的 Octree 中基于体素的 semless 网格
- swift - Swift:为什么 JSONDecoder (Codable/Decodable) 不调用结构的 init() 方法?
- python - 为什么`global`语句不影响当前块内的块?
- angular - 使用服务保存产品信息
- javascript - 错误:直方图
- angular - 可以根据角度条件进行路由吗?
- django - 负载平衡在单个硬件服务器上有意义吗?
- python - 我只想将名字 john 添加到垂直列表的末尾,但我不知道如何使用基本功能,请不要导入