0

我正在使用 MVC3,目前我正在遵循一种做法,即我为每个控制器声明一个 DB Container 实例。对于到达该控制器的每个请求,我都会使用该容器实例。如果我需要去我的模型进行查询或某事,我会将该实例作为参数发送给模型的函数。因此,对于整个应用程序,我创建并使用了 4-5 个不同的 DB Container 类实例。我的问题是,这对我的数据库操作有好处还是坏处?创建一个单独的容器实例是否重要?使用容器类的正确方法是什么?

我相信之前提到的类被称为 DBContext 。

4

1 回答 1

1

我不确定这是你的意思,但我可以给你一个我经常遵循的方法的例子:

为 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 类,该类扩展ControllerAsyncController 覆盖InitializeandDispose方法:

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);
    }

}

现在您可以在每个示例中使用以下方法HomeController继承MyController

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();
    }

}

这将使您的控制器相当干净。

于 2012-10-19T22:51:15.843 回答