我正在尝试设计一个回滚更改系统。 当记录 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/