我在控制器中写了这段代码:
public ActionResult AddNotice(NoticeViewModel nVN)
{
BOL.User CurrentUser = userbs.user.GetUser(User.Identity.Name);
int UserId = CurrentUser.ID;
var objNotice = new BOL.Notice()
{
NoticeID = nVN.SelectedNoticeTypeId,
ProductID = nVN.ProductID,
UserID = UserId
};
objBs.notice.AddNotice(objNotice);
方法:
public void AddNotice(Notice _notice)
{
int count = GetAllNotices().Where(x => x.UserID == _notice.UserID).Where(x => x.ProductID == _notice.ProductID).Count();
if (count == 0)
notice.InsertNotic(_notice);
else
notice.UpdateNotic(_notice);
}
public List<Notice> GetAllNotices()
{
return notice.GetAllNotices();
}
和:
public void UpdateNotic(Notice _notic)
{
db.Entry(_notic).State = EntityState.Modified;
db.Configuration.ValidateOnSaveEnabled = false;
db.SaveChanges();
db.Configuration.ValidateOnSaveEnabled = true;
}
运行更新时,我在db.SaveChanges();
EntityFramework.dll中发生了'System.Data.Entity.Infrastructure.DbUpdateConcurrencyException'类型的异常,但未在用户代码中处理
其他信息:存储更新,插入或删除语句 影响了意外的行数(0)。实体可能已经存在 自实体加载后修改或删除
我不知道是什么问题?
答案 0 :(得分:0)
在更新案例的AddNotice
中,Notice
实例未从您用于更新它的相同上下文中获取。
更改跟踪取决于与上下文关联的实体,然后进行更新。
或者您可以使用IDbSet<T>.Attach(entity)
关联在其他位置创建的实例。