我使用的是MVC3,目前我遵循的做法是为每个控制器声明一个DB容器实例。对于到达该控制器的每个请求,我都使用该容器实例。如果我需要转到我的模型进行查询或某些东西,我会将该实例作为参数发送给模型的函数。因此,对于整个应用程序,我创建并使用了4-5个不同的DB Container类实例。我的问题是,这对我的数据库操作有好的影响还是坏的影响?创建一个单独的容器实例重要吗?使用容器类的正确方式是什么?
我相信前面提到的类被称为DBContext。
发布于 2012-10-20 06:51:16
我不确定这是不是你的意思,但我可以给你举一个我经常遵循的方法的例子:
为DBContext创建一种“域服务类”
public class MyDomainService : IDisposable
{
private MyDbEntities dbo;
private bool isDisposed;
public MyDomainService()
{
dbo = new MyDbEntities();
}
public User GetUser(string userName)
{
return (from usr in dbo.Users
where usr.UserName == userName
select usr).SingleOrDefault();
}
public void Dispose()
{
if (isDisposed)
return;
isDisposed = true;
dbo.Dispose();
}
}创建一个扩展Controller或AsyncController的自定义控制器类,并覆盖Initialize和Dispose方法:
public class MyController : Controller
{
protected MyDomainService DomainService { get; private set; }
protected override void Initialize(System.Web.Routing.RequestContext
requestContext)
{
base.Initialize(requestContext);
DomainService = new MyDomainService();
}
protected override void Dispose(bool disposing)
{
DomainService.Dispose();
base.Dispose(disposing);
}
}现在,您可以在继承MyController的HomeController示例中使用以下方法
public class HomeController : MyController
{
public ActionResult Index()
{
return View();
}
[HttpPost]
public ActionResult Index(string username)
{
var user = DomainService.GetUser(username);
if (user != null)
return RedirectToAction("Account", "Information");
return View();
}
}这将使您的控制器保持相当干净。
https://stackoverflow.com/questions/12973604
复制相似问题