不了解DbContext - 每个应用程序或每个模型

时间:2013-12-26 15:48:07

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

DbContext班(EF)背后的想法是什么?我应该每个型号有一个,每个应用一个还是别的?

我想我不明白他们用的是什么。我知道我可以将数据提取逻辑放在那里,这很好,但在这种情况下,我认为每个模型应该有一个。虽然如果每个模型有一个,VS将为每个DbContext创建一个连接字符串,即。对于每个型号。我肯定在这里遗漏了一些东西。

3 个答案:

答案 0 :(得分:4)

要记住DbContext的一点是,它会跟踪数据的变化,并在调用SaveChanges时执行所有更新/插入/删除。因此,如果您有多个并发用户,则肯定需要多个DbContext类实例。

将DbContext视为用户将在我们的应用程序中执行的某些操作的范围。对于Web应用程序,我们通常会为每个Web请求创建一个新的DbContext。当用户列出博客条目,添加评论或编辑帖子时,我们总是创建新的DbContext,将数据读入其中,在必要时修改数据,然后调用SaveChanges。此时,EF计算出需要在数据库中更新的内容,并向数据库发出适当的查询。

由于SaveChanges的工作方式,您几乎可以将DbContext生命周期视为数据库事务。 DbContext包含了成功处理请求所必需的所有事情。

答案 1 :(得分:3)

可以这么说是“与数据库的连接”,对于连接到的每个数据库,通常都有一个。通常,这是每个应用程序一个。请注意,拥有一个模型列表很棒,但您仍然必须与实际数据库建立连接才能将数据导入这些模型。

答案 2 :(得分:1)

不久前我问了一个类似的问题。根据我的理解,最好将所有DbContext都放在一个类中。这是我的帖子的链接:

Entity Framework context format