asp.net-mvc - 从基本 Controller 继承 LINQ-to-SQL 数据上下文

标签 asp.net-mvc linq-to-sql datacontext httpcontext

我的基本 Controller 类,BaseController , 由面向公众的 Controller 继承,以使用 LINQ-to-SQL 访问请求之间的共享数据上下文。

  • 我是否通过将数据存储在 HttpContext.Current.Items 中以高效且安全的方式访问我的数据上下文?对于每个 HTTP 请求?
  • DataContextHelper类(class)
    internal static class DataContextHelper
    {
        public static MyDataContext CurrentContext
        {
            get
            {
                if (HttpContext.Current.Items["MyDataContext"] == null)
                {
                    MyDataContext context = new MyDataContext();
                    HttpContext.Current.Items["MyDataContext"] = context;
                }
                return (MyDataContext)HttpContext.Current.Items["MyDataContext"];
            }
        }
    }
    
    BaseController类(class):
    public class BaseController : Controller
    {
        protected MyDataContext db
        {
            get {
                return DataContextHelper.CurrentContext;
            }
        }
    }
    
    HomeController类(class):
    [HandleError]
    public class HomeController : BaseController // inherits db member
    {
        public ActionResult SomeAction(string id)
        {
            User user = db.Users.First(u => u.UserId == id);
            // ... do stuff
            db.SubmitChanges();
        }
    }
    

    最佳答案

    是的,这是具有 WebForms 和 MVC 的所有主要 ORM 的通用模式。

    在执行每个 Controller 操作后,我唯一会添加一个显式处置。只是为了确保一切都被正确处理。

    BaseController.cs :

        protected override void OnActionExecuted(ActionExecutedContext filterContext)
        {
            if (HttpContext.Current.Items["MyDataContext"] == null)
                return;
    
            var context = (MyDataContext)HttpContext.Current.Items["MyDataContext"];
    
            context.Dispose();
        }
    

    关于asp.net-mvc - 从基本 Controller 继承 LINQ-to-SQL 数据上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2684551/

    相关文章:

    c# - Linq to SQL 存储库应该实现 IDisposable

    jquery - 使用 ASP .NET MVC 和 jQuery AJAX 请求下载服务器生成的 CSV

    ajax - MVC 通用错误 View 和 Ajax Post 和错误代码 500

    c# - 将同一个表中的 2 个查询合并为一个 linq 查询

    c# - LINQ2SQL 获取随机记录

    c# - Linq2SQL,异常后使用dataContext

    javascript - 如何删除json中不需要的编码符号

    javascript - 在.Net Core 2.0 MVC 中删除并添加的下拉列表?

    c# - 在 LINQ 中过滤冗余数据

    c# - 比较两个 LINQ 查询,其中语句 Hasvalue 与 !=null