Наследование контекста данных LINQ-SQL от основного контроллера

Мой основной класс контроллера, BaseController, наследован общедоступными контроллерами для доступа к контексту совместно используемых данных между запросами с LINQ-SQL.

  • Я получаю доступ к своему контексту данных эффективным и безопасным способом путем хранения его в HttpContext.Current.Items для каждого Запроса HTTP?

DataContextHelper класс

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 класс:

public class BaseController : Controller
{
    protected MyDataContext db
    {
        get {
            return DataContextHelper.CurrentContext;
        }
    }
}

HomeController класс:

[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();
    }
}
5
задан Petrus Theron 21 April 2010 в 16:03
поделиться

1 ответ

Да, это общий шаблон для всех основных ORM как с WebForms, так и с MVC.

Единственное, что я бы добавил явное удаление после выполнения каждого действия контроллера. просто чтобы убедиться, что все утилизировано правильно.

В BaseController.cs :

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

        var context = (MyDataContext)HttpContext.Current.Items["MyDataContext"];

        context.Dispose();
    }
4
ответ дан 15 December 2019 в 00:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: