После открытия соединения, должен ли я явно закрыть его? или делает .net закрывать его автоматически? Как насчет того, если будет выбрано исключение?EF using и BeginTransaction, когда вызывать Connection.Close()?
using (DataContext pContext = new DataContext())
{
pContext.Connection.Open()
using (var trx = pContext.Connection.BeginTransaction())
{
//make changes to objects
//Make calls to ExecuteStoreCommand("Update table SET pee=1 AND poop=2 WHERE ETC");
pContext.SaveChanges();
trx.Commit();
}
}
Выполняется ли pContext.Connection.Close() `во всех случаях посредством фреймворка? Я знаю, что в обычном использовании это делает, но как насчет того, когда я его вручную открываю?
Я использую Connection.BeginTransaction, потому что в моих тестах (используя только SaveChanges() без транзакций), если этот код выполняется и сбой по какой-либо причине, команды, отправленные во время ExecuteStoreCommand(), сохраняются, даже если изменения в моем объектов нет.
Я должен позвонить Connection.Open() перед вызовом pContext.Connection.BeginTransaction() в противном случае я получаю ошибку:
Inner Exception:
The connection is not open.
Любая помощь будет оценена.
Вам не нужно вызывать 'pContext.Connection.Open()' –
Что вы пытаетесь сделать и почему вы думаете, что вам нужно открыть соединение или сделка вообще? SaveChanges обычно заботится о соединениях и транзакциях –
В этом заявлении я звоню в стандартные EF-обновления плюс ExecuteStoreCommand() и в своих тестах, не используя транзакцию, если происходит перехват, команды, отправленные в ExecuteStoreCommand(), сохраняются, а другие не. –