Последние 10 с лишним лет я всегда открывал соединение с базой данных (mysql) и оставлял его открытым, пока приложение не закрылось.Все запросы были выполнены в соединении.
Теперь, когда я вижу примеры на веб-странице Servicestack, я всегда вижу использование using
-блока, например:
using (var db = dbFactory.Open())
{
if (db.CreateTableIfNotExists<Poco>())
{
db.Insert(new Poco { Id = 1, Name = "Seed Data"});
}
var result = db.SingleById<Poco>(1);
result.PrintDump(); //= {Id: 1, Name:Seed Data}
}
В моем текущемtest-project, я заставил OrmLite работать в обычном режиме (одно db-соединение, без операторов using), поэтому у меня был класс _db
, например:
_dbFactory = new OrmLiteConnectionFactory($"Uid={dbAccount.Username};Password={dbAccount.Password};Server={dbAccount.Address};Port={dbAccount.Port};Database={dbAccount.Database}", MySqlDialect.Provider);
_db = _dbFactory.Open(); // var kept in memory, and used for all queries
Itработал в начале, но теперь я неожиданно получил исключение:
Уже есть открытый DataReader, связанный с этим подключением, который должен быть закрыт первым
Возможно, какой-то код выполняетсяSELECT здесь и там, и если я правильно понимаю, если SELECT и INSERT произошли бы одновременно, появляется эта ошибка?
Если да, то лучше ли всегда открывать новое соединение для каждого отдельного запроса (скажем, внутри оператора использования)?Разве это не большие затраты, что делать для каждого запроса?