在Httppost动作方法中: 我有以下代码:
[ValidateAntiForgeryToken]
[HttpPost]
public async Task<ActionResult> StudentDetails(string id, string type)
{
Student model1 = await db.Student.Where(s => s.StudentGuid.ToString() == id).SingleOrDefaultAsync();
model1.Type=type;//I didn't submit it yet to DB
Student model2 = await db.Student.Where(s => s.StudentGuid.ToString() == id).SingleOrDefaultAsync();
//at this point model2.Type took the same value of type without even setting it
}
为什么 model2 采用相同的 model1 值但我直接从数据库获取 model2 !! !!
答案 0 :(得分:1)
这是因为你真的没有从数据库中加载它。数据库上下文(db)已经通过第一次调用从数据库中检索了该项。
当您进行第二次调用以获取实体时,您实际上正在检索上下文先前在内存中创建的实例,因此,它包含您对“类型”所做的更改。
如果你想得到一个“干净”的实例副本,那么我想有办法做到这一点。谷歌就像“获得干净的实例实体框架”,并阅读一些回复。
编辑:我还强烈建议您阅读有关EF的一些内容,因为您似乎对其工作方式存在根本误解。