Максимум «единиц работы» в одной странице запроса? - PullRequest
1 голос
/ 15 мая 2009

Это не Один это? У меня есть метод, который получает пять списков из разных репозиториев. Каждый звонок открывает и закрывает новый Datacontext. Это нормально, или я должен все обернуть в один текстовый текст. В этом случае использовать один и тот же текстовый текст не просто, но я боюсь, что открывать и закрывать многочисленные текстовые данные в одном запросе страницы не очень хорошо.

Ответы [ 2 ]

2 голосов
/ 15 мая 2009

Вот статья на эту тему ...

Управление жизненным циклом данных Linq to SQL

Он рекомендует по одному на запрос, и я реализовал этот шаблон в нескольких приложениях, и он хорошо сработал для меня.

Он немного говорит об этом в этой статье ... Его быстрая и грязная версия ссылается на System.Web и делает что-то вроде этого:

    private TDataContext _DataContext;

    public TDataContext DataContext
    {
        get
        {
            if (_DataContext == null)
            {

                if (HttpContext.Current != null)
                {
                    if (HttpContext.Current.Items[DataContextKey] == null)
                    {
                        HttpContext.Current.Items[DataContextKey] = new TDataContext();
                    }

                    _DataContext = (TDataContext)HttpContext.Current.Items[DataContextKey];
                }
                else
                {
                    _DataContext = new TDataContext();
                }
            }

            return _DataContext;
        }
    }

Но затем он рекомендует вам сделать следующий шаг и избавиться от ссылки на System.Web, использовать внедрение зависимостей и создать собственный IContainer, который мог бы определять срок службы вашего текстового контекста в зависимости от того, работает ли он в модульном тесте, в Интернете. приложение и т. д.

Пример:

public class YourRepository
{

    public YourRepository(IContainer<DataContext> container)
    {

    }

}

затем замените HttpContext.Current.Items[DataContextKey] на _Container[DataContextKey]

надеюсь, это поможет ...

0 голосов
/ 20 мая 2009

Я использую единицу работы для каждого запроса и создаю модуль IHttpModule, который управляет жизненным циклом единицы измерения, создавая ее по запросу и дипозируя ее впоследствии. Текущая единица работы хранится в HttpContext.Current.Items (скрыто в Local.Data).

...