2016-09-08 3 views
0

Я использую RavenDB, и для открытия каждого db-сеанса требуется открыть сеанс db.
Например:
Создать код:Какой шаблон дизайна следует использовать вместо дубликата «using (connection.opensession)» statement

using (IDocumentSession session = _ravenContext.OpenSession()) 
    {       
     session.Store(entity); 
     session.SaveChanges(); 
    } 

GetByID код:

using (IDocumentSession session = _ravenContext.OpenSession()) 
     {       
      var entity= session.Load<T>(entityId); 

     } 

Но я не хочу, чтобы написать заявление, используя() для каждого действия (создание, обновление, запрос и и т. д.)
Есть ли какой-либо шаблон дизайна или другой способ записать его более общий и без дублирования с помощью() в коде?

Спасибо заранее

+0

'Execute (Action ExecuteAction)' – Will

+0

Как насчет стратегии шаблон? Вы можете ввести код для вызова с открытым сеансом в метод с использованием лямбда. – Baldrick

+0

Как я могу использовать лямбда? Пожалуйста, объясните. быть в курсе двух примеров, которые я дал. Thank – Shir

ответ

1

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

В частности, открытие сеанса на одну операцию с db, вероятно, является плохим.

Обычный сценарий заключается в том, чтобы открыть его при запуске запроса и закрыть & сохранить изменения, когда они закончились.

Примером этого можно увидеть здесь:

https://ayende.com/blog/4101/do-you-need-a-framework

+0

Thank. В соответствии с вашим примером сессия будет открыта для каждого запроса. Но не каждый запрос требует равенсессии. – Shir

+0

Открытие сессии очень дешево, здесь нет дополнительной стоимости –

+0

У меня есть проект ASP MVC и проект Winform. Они оба используют проект ворона. Проект winform - это работа, которая работает все время. Итак, где подходящее место для открытия сессии в проекте winform? – Shir

Смежные вопросы