我試圖重新使用現有的數據庫連接,以便可以使用TransactionScope
執行多個數據庫操作,而無需調用MSDTC。DbContext將不會保持連接打開以供重新使用
實體框架(在4.1版本中使用新的DbContext
API)似乎並不希望保持打開明確打開的連接。舊的ObjectContext
API保持連接按預期打開並documented。
由於DbContext
API只是在底層使用ObjectContext
,所以我期望有相同的行爲。有誰知道這個改變是有意的還是一個已知的問題?我無法在任何地方找到它。
public void ConnectionRemainsOpen()
{
using (var context = new TestDataContext())
{
try
{
Assert.AreEqual(ConnectionState.Closed, context.Database.Connection.State);
context.Database.Connection.Open();
var firstRecord = context.Table3.FirstOrDefault();
// this Assert fails as State == ConnectionState.Closed
Assert.AreEqual(ConnectionState.Open, context.Database.Connection.State);
var newRecord = new Table3
{
Name = "test",
CreatedTime = DateTime.UtcNow,
ModifiedTime = DateTime.UtcNow
};
context.Table3.Add(newRecord);
context.SaveChanges();
// this Assert would also fail
Assert.AreEqual(ConnectionState.Open, context.Database.Connection.State);
}
finally
{
if (context.Database.Connection.State == ConnectionState.Open)
context.Database.Connection.Close();
}
}
}
如果在Open()之後但在第一個查詢之前放置一個Assert,那麼結果是什麼?我想知道這裏的問題實際上只是它返回了一個錯誤的值,而不是實際關閉和重新打開連接。 – Tridus
@Tridus,您建議的斷言會傳遞「Open」的預期結果。 – GWB
我意識到這是一箇舊帖子,但我只是讀Julia Lerman的書,她使用的語法是context.Connection.Open()(即上下文和Connection之間沒有數據庫)。只是一個想法。 – Tod