这是对EF CodeFirst使用DbContext的不好方法吗?
问题描述:
我有一个基本控制器类,它具有以下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);
}
答
不知道在这里处理的是什么类,但是如果它被丢弃了,那么每次都会崩溃。您必须在调用dispose之后设置_database = null,否则将在处置状态下使用它。如果你想做任何类型的多线程,这是行不通的。如果超过1个用户同时使用它,则会崩溃。你将无法用静态单元测试数据库的使用。它会缓存您在一段时间后导致陈旧数据的所有数据,除非您只是用户。
答
自动处理请求非常方便,不要将其作为手动任务。
只是不要使用静态,总是使用using
声明为每个请求。
你不应该为实体框架的'DbContext'使用'static'。在你的情况下,只要请求结束,控制器就会被释放,下一个请求将会失败。除非使用'static' /'const'值,否则不要在'Controller'中使用'static'。 –
您应该了解依赖注入,而不是在基本控制器中声明常用的东西。 – mason
为什么不在控制器/或Dbcontext中使用静态?静态使其更快AFAIK。我应该使用Dbcontext和使用说明吗?到目前为止,应用程序和所有CRUD都能正常工作。 –