【发布时间】:2023-04-03 14:22:01
【问题描述】:
我刚刚从 net core 2.2 迁移到 mvc net core 3.0。现在,每次当我尝试向数据库添加新记录时,应用程序都会在数据库中创建 9 个相同记录的副本。我的 Db 中有很多表,而且每张表都会发生这种情况。当我使用 net core 2.2 时,一切正常。
我正在使用此代码向数据库添加新记录:
数据库上下文文件:
public virtual async Task<T> AddAsync(T t)
{
Context.Set<T>().Add(t);
await Context.SaveChangesAsync();
return t;
}
从控制器调用的存储库调用此函数:
public async Task<IActionResult> AddItem(Item item)
{
.....
}
从客户端的 jquery ajax 调用控制器,并且在单击添加按钮时向控制器发送请求。
$(document).on("click", "#addItem",
function (e) {
e.preventDefault();
e.stopPropagation();
var route="...";
var formId="...";
var form = $(formId);
form.validate();
if (!form.valid()) return;
addCompany(route,formId);
});
function addCompany(route, formId) {
alert("start");
var form = $(formId);
var formData = form.serialize();
$.ajax({
async: true,
url: route,
type: "POST",
cache: false,
data: formData,
success: function (result) {
alert("sucess");
},
error: function (xhr) {
alert("error");
}
});
};
我可以在屏幕上看到 9 次“开始”警报。过了一会儿,我可以看到 9 次“成功”警报。
当我尝试在调试器中跟踪代码时,我可以看到从一个函数到另一个函数的执行过程是混乱的——在一个函数中多次执行一行代码,之后在另一个函数中执行多次。之后,它返回到第一个函数的另一行,一切重复 5-10 次。
最奇怪的是,这9条记录通常都保存在MS server Db中。它们具有所有字段和键。但是当我在屏幕上打开它们中的任何一个时,它显示所有字段都是空的。但是使用相同的应用程序,我仍然可以正常打开并在屏幕上查看在迁移到 Core 3.0 之前保存的记录
【问题讨论】:
-
不完整。 9个副本是否具有相同的ID? SaveChanges 的任何覆盖?你怎么称呼这个方法?当你在这里设置断点时,它的命中频率是多少?等
-
“从一个函数到另一个函数的执行混乱”意味着您在多个线程(请求)上运行。因此,请向我们展示您如何/何时调用 AddCompany()。
标签: c# jquery ajax entity-framework .net-core