【发布时间】:2022-01-19 19:31:30
【问题描述】:
我想修改我的数据库表(通知表)的一列。相关的通知 Id 由视图确定,并使用 Ajax 调用发送回控制器。我的控制器代码:
[HttpPost]
public JsonResult UpdateNotification(int notificationId, int userId)
{
string notificationText = _notificationRepository.GetNotificationById(notificationId).isSeen;
var myNotification = new Notification()
{
isSeen = string.Format("{0},{1}", notificationText, userId)
};
bool result = _notificationRepository.UpdateNotification(notificationId, myNotification);
if (result == true)
{
DeleteNotification(notificationId);
return Json(new { success = true});
}
else
{
return Json(new { success = false });
}
}
bool result = _notificationRepository.UpdateNotification(notificationId, myNotification); 行链接到存储库实现:
bool INotificationRepository.UpdateNotification(int selectedNotId, Notification notification)
{
try
{
var selectedNotification = new Notification()
{
notificationId = selectedNotId,
isSeen = notification.isSeen
};
context.Entry(selectedNotification).Property(x => x.isSeen).IsModified = true;
return true;
}
catch (Exception)
{
return false;
}
}
当我调试时,context.Entry(selectedNotification).Property(x => x.isSeen).IsModified = true; 行中出现以下错误并说:
System.InvalidOperationException: '实体类型的实例 无法跟踪“通知”,因为另一个实例与 {'notificationId'} 的相同键值已被跟踪。什么时候 附加现有实体,确保只有一个实体实例具有 附加了给定的键值。考虑使用 'DbContextOptionsBuilder.EnableSensitiveDataLogging' 查看 键值冲突。'
我尝试使用 context.Entry(selectedNotId).State = Microsoft.EntityFrameworkCore.EntityState.Detached 将notificationId 从实体中分离出来,但代码停在这一行并且没有任何反应。我该如何解决这个问题?
更新: 我使用相同的 DbContext 从数据库表中读取 notificationId(在视图中)。
我在 Program.cs 中添加了作用域存储库:
builder.Services.AddScoped<INotificationRepository, NotificationRepository>();
【问题讨论】:
标签: entity-framework asp.net-core entity-framework-core