gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 20:24:28 25 4
gpt4 key购买 nike

我的基本 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/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com