2017-09-24 41 views
0

我有一个基本控制器类,它具有以下DbContext。不用每个数据库工作都使用“使用”语句,我可以依靠这个。迄今为止,应用程序按预期运行我不确定是否真的需要Dispose部分。编号这是对EF CodeFirst使用DbContext的不好方法吗?

private static Context _database; 

public static Context Db 
{ 
    get 
    { 
     if (_database == null) 
     { 
      _database = new Context(); 
     } 
     return _database; 
    } 
} 

protected override void Dispose(bool disposing) 
{ 
    if (_database == null) 
    { 
     _database.Dispose(); 
    } 

    base.Dispose(disposing); 
} 
+2

你不应该为实体框架的'DbContext'使用'static'。在你的情况下,只要请求结束,控制器就会被释放,下一个请求将会失败。除非使用'static' /'const'值,否则不要在'Controller'中使用'static'。 –

+0

您应该了解依赖注入,而不是在基本控制器中声明常用的东西。 – mason

+0

为什么不在控制器/或Dbcontext中使用静态?静态使其更快AFAIK。我应该使用Dbcontext和使用说明吗?到目前为止,应用程序和所有CRUD都能正常工作。 –

回答

0

不知道在这里处理的是什么类,但是如果它被丢弃了,那么每次都会崩溃。您必须在调用dispose之后设置_database = null,否则将在处置状态下使用它。如果你想做任何类型的多线程,这是行不通的。如果超过1个用户同时使用它,则会崩溃。你将无法用静态单元测试数据库的使用。它会缓存您在一段时间后导致陈旧数据的所有数据,除非您只是用户。

0

自动处理请求非常方便,不要将其作为手动任务。

只是不要使用静态,总是使用using声明为每个请求。