我正在尝试设计回滚更改系统。 我在修改或删除记录ID时跟踪旧记录值,然后在用户选择回滚时使用该值重新插入...
版本回滚正在按预期工作。
删除不是...因为当我将实体附加到DBContext时它具有旧的Id但是当我执行DbContext.SaveChanges()时; 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而不是生成一个新的?
我尝试了很多解决方案,但没有一个能够解决问题。
由于
答案 0 :(得分:0)
要禁用“自动生成的ID”,您必须在SQL中运行此命令:
<?php
session_start();
$db = mysqli_connect ("localhost", "root", "","information1");
if (isset($_POST['Register'])){
$username = mysqli_real_escape_string($db, $_POST['username']);
$password = mysqli_real_escape_string($db, $_POST['password']);
$sql = "SELECT username, password FROM user WHERE username='$username' AND
password='$password'";
$base =mysqli_query ($db, $sql);
if (mysqli_num_rows($base) == 1) {
header ("location: nav_menu.php");
}
else
{
echo "Passwords does not match";
}
}
?>
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" type="text/css" href="Layout.css" />
<link rel="stylesheet" type="text/css" href="Menu.css" />
<meta http-equiv="Content-Type" content="text/html"; charset=utf-8" />
<title> Title </title>
</head>
<body>
<div id="Holder"></div>
<div id="Header"></div>
<div id="NavBar">
<nav>
<ul>
<li><a href="\home.php"> Home </a> </li>
<li><a href="\login.php">Login </a></li>
<li><a href="\register.php">Register </a></li>
</ul>
</nav>
</div>
<div id="Content">
<div id="PageHeading">
<h1> Welcome to HOME page </h1>
</div>
<div id="ContentRight">
<h2> Text2 </h2> </br>
<h6> Text3 </h6 </br>
</div>
<div id="ContentLeft">
<form name ="form2" method="POST" action="login.php">
<div class = "ContentTable">
<table width="400" border="0" align ="left">
<tbody>
<h4> Username: </h4>
<input type="text" name= "username" id="username" required></td>
</tr>
<tr>
<td> </td>
</tr>
<h4> Password: </h4>
<input type="text" name= "password" id="password" required></td>
</tr>
<td><input type="submit" name="Register" id="RegisterButton" value="Register"></td>
</div>
</div>
</form>
<div id="Footer"></div>
</body>
</html>
然后你可以为PK插入你想要的任何值,假设它仍然可用。但是,我不认为EF有办法从代码中做到这一点。
我不完全确定这会起作用,但理论上,您可以在创建事务的保存更改之前运行一些临时SQL,然后查看EF是否会接受它。
如果这不起作用,那么试试这个:
SET IDENTITY_INSERT [<schema>].[<TableName>] ON;
EIDT:或尝试这种方法:
How can I force entity framework to insert identity columns?