c# - 当 ID 字段 (PK) 自动递增时(带有 EF 的 MySQL),使用与之前相同的 Id 恢复已删除的记录

标签 c# mysql entity-framework auto-increment identity

我正在尝试设计一个回滚更改系统。 当记录 ID 被修改或删除时,我会跟踪旧记录值,然后当用户选择回滚它时,我会使用该值重新插入它...

版本回滚正在按预期进行。

删除不是...因为当我将实体附加到 DBContext 时,它具有旧的 Id,但是当我执行 DbContext.SaveChanges(); 时Id 被替换为新的 Id(自动递增)

这里是示例代码:

var model = JsonConvert.DeserializeObject(oldValues.OldData, type);
DbSet mySet = this.Set(type);
mySet.Attach(model);
this.Entry(model).State = oldValues.AuditType == 0 ? EntityState.Modified : EntityState.Added;
base.SaveChanges();

进入 model.Id 我可以在保存之前看到正确的 ID,但在保存之后 EF 会根据新的 ID 更改它。

是否有办法临时设置以保留当前的 ​​Id,而不是生成新的 Id?

我尝试了很多解决方案,但没有一个有效。

谢谢

最佳答案

要禁用自动生成的 ID,您必须在 SQL 中运行以下命令:

SET IDENTITY_INSERT [<schema>].[<TableName>] ON;  

然后您可以为 PK 插入任何您想要的值,假设它仍然可用。但是,我认为 EF 没有办法通过代码执行此操作。

我不完全确定这会起作用,但是从理论上讲,您可以在对您创建的事务进行保存更改之前运行一些临时 SQL,然后查看 EF 是否会接受它。

如果这不起作用,请尝试以下操作:

ALTER TABLE theTableInQuestion AUTO_INCREMENT=1234

EIDT:或者尝试这种方法:

How can I force entity framework to insert identity columns?

关于c# - 当 ID 字段 (PK) 自动递增时(带有 EF 的 MySQL),使用与之前相同的 Id 恢复已删除的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41683623/

相关文章:

c# - 如何将特定的 .hbm.xml 文件添加到 nhibernate 配置以在导出模式中使用

c# - 如何将 System.Diagnostics.Trace 和 System.Diagnostics.Debug 消息记录到 NLog 文件?

mysql - 在日期范围内加入 mysql

.net - 将参数与 EntityFramework 和 `FromSql` 一起使用

c# - HttpContent.ReadAsAsync 反序列化问题

c# - Visual Studio 2013 Typescript 集成中断

python - 处理 SQLAlchemy 断开连接

mysql - 读取一列的值并分配给另一列

entity-framework - 更改 sp 时的函数导入

.net - 如果我调用 DbContext.Dispose 而不调用 DbContext.SaveChanges 会怎样?