【发布时间】:2021-10-01 06:22:20
【问题描述】:
我有一个用户个人资料页面,用户可以更新它自己的信息。
当我尝试更新时,我收到instance of entity type cannot be tracked because another instance with same key value is tracked 错误,我已经四处寻找解决这个问题。我知道我需要将该对象指向Detached,这样我就可以更新它而不会在Try-Catch 块中出现任何错误。让我先向您展示我的前端和后端。
前端:
<form class="mt-0" asp-action="MyProfile" enctype="multipart/form-data" method="post">
<input asp-for="User.UserID" type="hidden" value="@Model.User.UserID" name="UserID">
<input asp-for="User.UserPassword" type="hidden" value="@Model.User.UserPassword" name="UserPassword">
<input asp-for="User.UserEMail" type="hidden" value="@Model.User.UserEMail" name="UserEMail">
<input asp-for="User.UserToken" type="hidden" value="@Model.User.UserToken" name="UserToken">
<input asp-for="User.UserRequestToken" type="hidden" value="@Model.User.UserRequestToken" name="UserRequestToken">
<input asp-for="User.UserIsActive" type="hidden" value="@Model.User.UserIsActive" name="UserIsActive">
<input asp-for="User.UserIsEmailConfirmed" type="hidden" value="@Model.User.UserIsEmailConfirmed" name="UserIsEmailConfirmed">
<input asp-for="User.CompanyID" type="hidden" value="@Model.User.CompanyID" name="CompanyID">
<input asp-for="User.UserRoleID" type="hidden" value="@Model.User.UserRoleID" name="UserRoleID">
<input asp-for="User.CompanyIsAdmin" type="hidden" value="@Model.User.CompanyIsAdmin" name="CompanyIsAdmin">
<input asp-for="User.CreatedDate" type="hidden" value="@Model.User.CreatedDate" name="CreatedDate">
<div class="form-row mb-4">
<div class="col">
<label asp-for="User.UserName"><b>Kullanıcı Adı</b></label>
<input asp-for="User.UserName" type="text" class="form-control"
placeholder="Ad" name="UserName" value="@Model.User.UserName" required>
<span asp-validation-for="User.UserName" class="text-danger"></span>
</div>
<div class="col">
<label asp-for="User.UserSurname"><b>Kullanıcı Soyadı</b></label>
<input asp-for="User.UserSurname" type="text" class="form-control"
placeholder="Soyad" name="UserSurname" value="@Model.User.UserSurname" required>
<span asp-validation-for="User.UserSurname" class="text-danger"></span>
</div>
</div>
<div class="form-row mb-4">
<div class="col">
<label asp-for="User.UserPhone"><b>Kullanıcı Telefonu</b></label>
<input asp-for="User.UserPhone" type="text" class="form-control"
placeholder="+905555555555" minlength="11" name="UserPhone" value="@Model.User.UserPhone" required>
<span asp-validation-for="User.UserPhone" class="text-danger"></span>
</div>
<div class="col">
<label asp-for="User.UserBPhone"><b>Kullanıcı İş Telefonu</b></label>
<input asp-for="User.UserBPhone" type="text" class="form-control"
placeholder="+905555555555" minlength="11" name="UserBPhone" value="@Model.User.UserBPhone">
<span asp-validation-for="User.UserBPhone" class="text-danger"></span>
</div>
</div>
<button type="submit" name="MyProfile" class="btn btn-primary mt-2 mb-2 btn-block">
Update Your Informations
</button>
</form>
后端:
#region /*UpdateMyProfile*/
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> MyProfile(User user)
{
try
{
if (ModelState.IsValid)
{
// That's the point where i got the null exception error
_context.Entry(user).State =Microsoft.EntityFrameworkCore.EntityState.Detached;
// That's the point where i got the null exception error
user.ModifiedDate = DateTime.Now;
user.ModifiedUserId = getCurrentUser();
user.ModifiedUserType = getCurrentUserClaimRole();
await _unitOfWorkUser.RepositoryUser.UpdateAsync(user);
await _unitOfWorkUser.CompleteAsync();
var log = _logging.Logging("Firma (Kullanıcı Bilgilerini) Güncelledi", "Update/Post",//
user.UserID.ToString(), "Company-MyProfile/UpdateMyProfile", getCurrentUser(), getCurrentUserClaimRole());
await _unitOfWorkLog.RepositoryLog.CreateAsync(log);
await _unitOfWorkLog.CompleteAsync();
return RedirectToAction("MyProfile");
}
else
{
TempData["Message"] = "İşleminiz Başarısız.";
TempData["JS"] = "showError();";
return RedirectToAction("MyProfile");
}
}
catch (Exception ex)
{
var log = _logging.Logging(ex.Message, "Exception/Hata", user.UserID.ToString(),
"MyProfile/UpdateMyProfile", getCurrentUser(), getCurrentUserClaimRole());
_unitOfWorkLog.RepositoryLog.Create(log);
_unitOfWorkLog.Complete();
TempData["Message"] = ex.Message;
TempData["JS"] = "showError();";
return RedirectToAction("MyProfile");
}
}
我将异常指向后端方法。我不知道为什么,但是当我尝试Detached 对象时,我得到了 Null Exception。我不知道为什么我会收到这个错误,我的意思是它没有意义。
【问题讨论】:
-
我们在这里看到零 EF 代码。另外,您是否检查过
user不是null?您应该调试自己的代码并告诉实际为 null 的内容。我们无法为您做到这一点。 -
用户不为空。我确定这一点,我已经看过相关的对象。我相信它不是空异常错误。当我弄清楚时我会告诉你的
标签: c# asp.net-mvc asp.net-core .net-core entity-framework-core