MVC中每个请求带有Owin DbContext的实体框架

休·杰夫纳(Hugh Jeffner)

当使用单个用户帐户时,我注意到MVC的项目模板在当前Owin上下文(在中App_Start/Startup.Auth.cs)中放置了一些对象

// Configure the db context, user manager and signin manager to use a single instance per request
app.CreatePerOwinContext(ApplicationDbContext.Create);
app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create);
app.CreatePerOwinContext<ApplicationSignInManager>(ApplicationSignInManager.Create);

看来这是要访问数据库的“身份”功能。我的理解是,ApplicationDbContext每个请求都会创建一个实例,并在整个管道中重复使用。对我自己的实体框架执行相同操作是否有益DbContext

例如,我在中创建了一个新文件App_Start/Startup.Data.cs

public partial class Startup
{

    public void ConfigureData(IAppBuilder app)
    {

        app.CreatePerOwinContext(CreateParkingEntities);

    }

    protected ParkingEntities CreateParkingEntities()
    {
        return new ParkingEntities();
    }

}

然后在Startup.cs

public partial class Startup
{
    public void Configuration(IAppBuilder app)
    {
        ConfigureAuth(app);
        ConfigureData(app);
    }
}

然后,我可以在控制器中使用上下文:

private ParkingEntities _db;

public ParkingEntities DbContext
{
    get
    {
        return _db ?? HttpContext.GetOwinContext().Get<ParkingEntities>();
    }
    private set
    {
        _db = value;
    }
}

我认为如果这是标准做法,则实体框架对此会有一些支持,但是它只是在控制器级别创建了一个实例。是否可以安全地假设,如果DbContext仅从该控制器进行访问,那么它在功能上等同于上述实现,并且将其放置在Owin管道中是过大的?

我想这种方法的另一种用法是,如果需要其他设置,则是DbContext的单个初始化点。

AJ理查森

DbContext设计为轻量级,因此每次需要一个新实例时都不会花费太多成本。主要成本是重新创建连接和垃圾回收所创建的所有实例。

请注意,如果您Find()在DbSet上使用该方法,它将缓存结果,因此下次您请求它时,它不需要进入数据库。如果重新使用相同的上下文,则可以利用该缓存,但是,如果创建新的上下文,则会丢失缓存。

如果将int存储DbContext在控制器的实例成员中,则它将仅用于一个请求,因为将为每个请求创建一个新的控制器实例。只要确保您不要将其放置在静态成员中,否则我希望您会获得各种竞赛条件。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

实体框架DbContext在查询中

来自分类Dev

没有实体框架DbContext的OWIN配置

来自分类Dev

从实体框架中的实体获取DbContext

来自分类Dev

对DbContext的更改未保存-MVC实体框架

来自分类Dev

如何在实体框架中识别DbContext?

来自分类Dev

实体框架中DbContext的奇怪行为

来自分类Dev

窗口窗体中的实体框架 DbContext 范围

来自分类Dev

表名称中带有句点的表的DbContext。实体框架

来自分类Dev

实体框架核心1.0 DbContext不限于http请求

来自分类Dev

具有实体框架dbcontext的Singleton很好吗?

来自分类Dev

在DBcontext中声明DBSet <Type>-实体框架代码优先

来自分类Dev

实体框架6 EntityDataSource在DbContext中未调用SaveChanges

来自分类Dev

使用实体框架6的mvc4中的单个或多个DbContext文件

来自分类Dev

在实体框架中具有2个DbContext的回滚事务。使用TransactionScope还是TransactionBegin?

来自分类Dev

没有使用()作用域的DAL方法中的实体框架新的dbContext

来自分类Dev

实体框架6 DBContext仅具有所有表的子集

来自分类Dev

具有连接字符串的实体框架DbContext构造函数

来自分类Dev

实体框架:是否有多个dbcontext?和其他一些与性能相关的问题

来自分类Dev

具有连接字符串的实体框架DbContext构造函数

来自分类Dev

在 ADO.NET 实体框架上,DbContext 对象没有表字段

来自分类Dev

实体框架6数据库优先方法中DbContext对象之间的共享连接

来自分类Dev

工作者角色中实体框架的DbContext生存期

来自分类Dev

Visual Studio中的实体框架:数据库不是使用DbContext基本构造函数创建的

来自分类Dev

在实体框架5中重新创建和处置dbcontext

来自分类Dev

Visual Studio中的实体框架:数据库不是使用DbContext基本构造函数创建的

来自分类Dev

实体框架6数据库优先方法中的DbContext对象之间共享连接

来自分类Dev

使用实体框架更新 DBContext 类中的创建和修改日期字段

来自分类Dev

带有实体框架的ASP .NET MVC 5中的并发

来自分类Dev

无法使用实体框架和ASP.NET MVC从Models.Class转换为DbContext.Class

Related 相关文章

  1. 1

    实体框架DbContext在查询中

  2. 2

    没有实体框架DbContext的OWIN配置

  3. 3

    从实体框架中的实体获取DbContext

  4. 4

    对DbContext的更改未保存-MVC实体框架

  5. 5

    如何在实体框架中识别DbContext?

  6. 6

    实体框架中DbContext的奇怪行为

  7. 7

    窗口窗体中的实体框架 DbContext 范围

  8. 8

    表名称中带有句点的表的DbContext。实体框架

  9. 9

    实体框架核心1.0 DbContext不限于http请求

  10. 10

    具有实体框架dbcontext的Singleton很好吗?

  11. 11

    在DBcontext中声明DBSet <Type>-实体框架代码优先

  12. 12

    实体框架6 EntityDataSource在DbContext中未调用SaveChanges

  13. 13

    使用实体框架6的mvc4中的单个或多个DbContext文件

  14. 14

    在实体框架中具有2个DbContext的回滚事务。使用TransactionScope还是TransactionBegin?

  15. 15

    没有使用()作用域的DAL方法中的实体框架新的dbContext

  16. 16

    实体框架6 DBContext仅具有所有表的子集

  17. 17

    具有连接字符串的实体框架DbContext构造函数

  18. 18

    实体框架:是否有多个dbcontext?和其他一些与性能相关的问题

  19. 19

    具有连接字符串的实体框架DbContext构造函数

  20. 20

    在 ADO.NET 实体框架上,DbContext 对象没有表字段

  21. 21

    实体框架6数据库优先方法中DbContext对象之间的共享连接

  22. 22

    工作者角色中实体框架的DbContext生存期

  23. 23

    Visual Studio中的实体框架:数据库不是使用DbContext基本构造函数创建的

  24. 24

    在实体框架5中重新创建和处置dbcontext

  25. 25

    Visual Studio中的实体框架:数据库不是使用DbContext基本构造函数创建的

  26. 26

    实体框架6数据库优先方法中的DbContext对象之间共享连接

  27. 27

    使用实体框架更新 DBContext 类中的创建和修改日期字段

  28. 28

    带有实体框架的ASP .NET MVC 5中的并发

  29. 29

    无法使用实体框架和ASP.NET MVC从Models.Class转换为DbContext.Class

热门标签

归档