На самом деле, я думаю, что это семантически (или как я должен это сказать), не правильно создавать и размещать текстовые данные в вашем хранилище.
Я имею в виду: если вы открываете новое соединение с БД в каждом методе вашего хранилища, вы делаете это неправильно ИМХО. Это слишком много мелкозернистого.
Класс репозитория не знает «контекста», в котором он используется. Ваш репозиторий не должен отвечать за открытие / закрытие соединений или за запуск и совершение транзакций.
Контекст является королем, а хранилище не знает контекста, в котором он используется. Итак, IMHO, это ответственность уровня приложений или сервисного уровня за открытие новых объектов DataContext и их закрытие / удаление. (То же самое относится к транзакциям).
Итак, вот как я это делаю: (обратите внимание, что я не использую Entity Framework, но использую NHibernate. Я предполагаю, что класс DataContext в EF аналогичен ISession в NHibernate):
using( ISession s = theSessionFactory.OpenSession() )
{
ICustomerRepository cr = RepositoryFactory.GetCustomerRepository(s);
Customer c1 = cr.GetCustomer(1);
Customer c2 = cr.GetCustomer(2);
// do some other stuff
s.StartTransaction();
cr.Save (c1);
cr.Save (c2);
s.Commit();
}
(Это не реальный выход кода; он даже не будет компилироваться, так как ISession не имеет метода Commit.;) Вместо этого StartTransaction возвращает ITransaction, который имеет какой-то метод commit, но Я думаю, вы поймете мой дрейф. ;))