首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用LINQ-to-SQL容器

使用LINQ-to-SQL容器
EN

Stack Overflow用户
提问于 2012-10-19 19:47:10
回答 1查看 225关注 0票数 0

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-20 06:51:16

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

为DBContext创建一种“域服务类”

代码语言:javascript
复制
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();
    }
}

创建一个扩展ControllerAsyncController的自定义控制器类,并覆盖InitializeDispose方法:

代码语言:javascript
复制
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);
    }

}

现在,您可以在继承MyControllerHomeController示例中使用以下方法

代码语言:javascript
复制
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();
    }

}

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12973604

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档