很抱歉,如果主题不准确,但基本上在提交表格后我想比较模型的外键的先前价值。
我的模特是:
public class Booking
{
public int ID { get; set; }
[ForeignKey("Store")]
public int StoreID { get; set; }
public virtual Store Store { get; set; }
public string BookedBy { get; set; }
public DateTime? DateBooked { get; set; }
public string Description { get; set; }
public DateTime FromDate { get; set; }
public DateTime ToDate { get; set; }
public string Status { get; set; }
}
在编辑视图中编辑预订并提交后,我想检查StoreID是否已被修改,以便我可以执行必要的操作。
我创建了一个Booking为oldBooking的实例,然后将StoreID
与从View传回的booking.StoreID
进行比较,但是当我保存已编辑的表单时,这会创建一个附加错误。
有什么建议吗?
2015年1月27日编辑:
public ActionResult Edit([Bind(Include = "ID,StoreID,BookedBy,DateBooked,Agreement,Description,FromDate,ToDate")] Booking booking, string returnURL)
{
if (ModelState.IsValid)
{
Booking oldBooking = db.Bookings.Find(booking.ID);
int prevStoreID = oldBooking.StoreID;
db.Entry(booking).State = EntityState.Modified;
db.SaveChanges();
if(prevStoreID == booking.StoreID)
{
sendStoreChangeEmail(prevStoreID, booking.StoreID);
}
return RedirectToAction("Index", "Home", null);
}
ViewBag.StoreID = new SelectList(db.Stores, "ID", "ID", booking.StoreID);
return View(booking);
}
尝试更新数据库条目状态时出现此错误:
"附加类型为'uatlab2.Models.Booking'的实体失败,因为同一类型的另一个实体已具有相同的主键值。使用'附加'方法或将实体的状态设置为“未更改”#39;或者'修改'如果图中的任何实体具有冲突的键值。这可能是因为某些实体是新的并且尚未收到数据库生成的键值。在这种情况下,请使用'添加'方法或“添加”#39;实体状态跟踪图形,然后将非新实体的状态设置为“未更改”。或者'修改'酌情。"
答案 0 :(得分:0)
在阅读了几篇其他帖子并使用Google搜索分离后,我读了这篇文章: ASP MVC How to update DB entry with collections field
在我获得prevStoreID后执行此操作: ((IObjectContextAdapter)分贝).ObjectContext.Detach(oldBooking);
它有效。
感谢您的帮助和鼓舞。
C