【发布时间】:2011-09-22 09:36:04
【问题描述】:
我正在使用 EF 和 Code First 处理 ASP.NET MVC3。
我正在编写一个简单的问题跟踪器以供练习。在我的控制器中,我有一段相当标准的代码:
[HttpPost]
public ActionResult Edit(Issue issue) {
if (ModelState.IsValid) {
dbContext.Entry(issue).State = EntityState.Modified
.....
}
}
问题第 1 部分 我试图弄清楚 dbcontext 是如何工作的 - 在我在 dbContext.Entry(issue) 上设置 State 之前,我假设我的问题对象是分离的。一旦我设置了要修改的状态,对象就会被附加——但是附加到什么? dbContext 还是数据库?我有点想念这个(附加)实际上意味着什么?
问题第 2 部分 为了论证,假设我决定在我的问题上设置“已接受”字段。接受是一个布尔值。我从它是假的开始,我在表单中将它设置为真并提交。在附加我的对象时,OriginalValues 集合的意义是什么?例如,如果我在设置 EntityState.Modified 之后但在调用 SaveChanges() 之前设置断点,我可以查询
db.Entry(issue).OriginalValues["Accepted"]
这将给我与简单地查询已传递给编辑的问题对象相同的值......即它给出的结果与
相同issue.Accepted
我显然遗漏了一些东西,因为文档说 “原始值通常是实体的属性值,就像上次从数据库中查询时一样。” 但事实并非如此,因为数据库仍然报告 Accepted 为假(是的,我在文档中注意到“通常”这个词,但我的代码几乎都是由 MS 代码生成的标准,所以......)。 那么,我错过了什么?这里到底发生了什么?
【问题讨论】:
标签: asp.net-mvc-3 entity-framework-4.1 ef-code-first