post保存数据实体框架asp mvc

时间:2018-03-27 07:45:23

标签: c# asp.net-mvc entity-framework

在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 !! !!

1 个答案:

答案 0 :(得分:1)

这是因为你真的没有从数据库中加载它。数据库上下文(db)已经通过第一次调用从数据库中检索了该项。

当您进行第二次调用以获取实体时,您实际上正在检索上下文先前在内存中创建的实例,因此,它包含您对“类型”所做的更改。

如果你想得到一个“干净”的实例副本,那么我想有办法做到这一点。谷歌就像“获得干净的实例实体框架”,并阅读一些回复。

编辑:我还强烈建议您阅读有关EF的一些内容,因为您似乎对其工作方式存在根本误解。