Вопрос про Entity Framework

Николай Н.
Дата: 15.04.2014 16:06:48
Добрый день!
Подскажите как корректно работать с Entity Framework.
Как лучше использовать контекст создавать в виде поля, и дальше его использовать во всех методах
    
    class PriceList : IDisposable
    {
        CRMEntities entities = new CRMEntities();
        public void Dispose()
        {
            if (entities != null)
            {
                entities.Dispose();
                entities = null;
            }
        }
     ................
   }

Либо создавать экземпляр в каждом методе?
Shocker.Pro
Дата: 15.04.2014 16:07:24
Николай Н.
создавать экземпляр в каждом методе?
так
Николай Н.
Дата: 15.04.2014 16:31:57
Shocker.Pro, Спасибо.
А не затруднит ответить почему? Дело плохого тона или что-то глубже?
Алексей К
Дата: 15.04.2014 16:36:21
Николай Н.
Либо создавать экземпляр в каждом методе?
Это может привести к нежелательной распределённой транзакции.

Есть ещё два способа:

1. Если речь идёт о сервере приложений (WCF, Asp.Net), то можно инжектировать контекст используя DI-контейнер. При этом, время жизни контекста привязать к вызову метода (WCF operation, http request и т. п.), используя LifeTimeManager DI-контейнера. В WPF-приложении такой подход применить, наверное (не пробовал), тоже можно, привязав удаление контекста к DispatcherHooks.DispatcherInactive Event.

2. Использовать ThreadStatic + счётчик ссылок (см Фабрика контекстов базы данных).
Алексей К
Дата: 15.04.2014 16:38:11
Вдогонку, навсякий: использование ThreadStatic затрудняет использование асинхронных операций.
Николай Н.
Дата: 17.04.2014 12:34:21
В общем еще больше меня запутали))
Речь идет о WindowsForm и WPF под декстоп.
Алексей К
Дата: 17.04.2014 13:29:36
Николай Н.
В общем еще больше меня запутали))
Потому что не нужно бояться "плохого тона". Делайте как больше нравится и всё. Возможные варианты известны, надо выбрать наиболее подходящий, учитывая их преимущества и недостатки.
skyANA
Дата: 17.04.2014 13:33:09
Алексей К
Николай Н.
В общем еще больше меня запутали))
Потому что не нужно бояться "плохого тона".
А зачем тогда DI и прочую фигню предлагаете?
skyANA
Дата: 17.04.2014 13:37:15
Николай Н.
Речь идет о WindowsForm и WPF под декстоп.
В десктоп приложениях можно использовать один контекст (одно открытое соединение) во течение всего времени работы приложения.

Сколько пользователей работает одновременно?
Алексей К
Дата: 17.04.2014 13:49:10
skyANA
Алексей К
пропущено...
Потому что не нужно бояться "плохого тона".
А зачем тогда DI и прочую фигню предлагаете?
Ничего не предлагаю. Просто огласил весь список. :-)

skyANA
Николай Н.
Речь идет о WindowsForm и WPF под декстоп.
В десктоп приложениях можно использовать один контекст (одно открытое соединение) во течение всего времени работы приложения.
В декстоп приложениях ещё бывает многопоточность. Я бы не стал такое советовать. :-)