Как управлять соединением в длительно существующем контексте объекта (платформа Entity Framework)
В данном разделе показано на примере, как вручную открыть соединение для длительно существующего контекста объекта. В примере также показано, как сделать, чтобы соединение гарантированно закрывалось при вызове метода Dispose для данного контекста. Дополнительные сведения см. в разделе Управление контекстом объекта (платформа Entity Framework).
Пример в этом разделе основан на модели Модель AdventureWorks Sales (модель EDM). Чтобы запустить код, используемый в данном примере, нужно сначала добавить к проекту модель AdventureWorks Sales и настроить его для использования платформы Entity Framework. Для этого выполните инструкции из раздела Как использовать мастер моделей EDM (платформа Entity Framework).
Примеры
В данном примере проводится открытие соединения вручную в длительно существующем контексте объекта ObjectContext, затем выполнение запроса и сохранение изменений. Соединение закрывается при удалении контекста объекта ObjectContext.
' Define the order ID for the order we want.
Dim orderId As Integer = 43661
' Create a long-running context.
Dim advWorksContext As New AdventureWorksEntities()
Try
' Explicitly open the connection.
If Not advWorksContext.Connection.State = ConnectionState.Open Then
advWorksContext.Connection.Open()
End If
' Execute a query to return an order.
Dim order As SalesOrderHeader = _
advWorksContext.SalesOrderHeader.Where( _
"it.SalesOrderID = @orderId", New ObjectParameter("orderId", orderId)) _
.Execute(MergeOption.AppendOnly).First()
' Change the status of the order.
order.Status = 1
' Save changes.
If 0 < advWorksContext.SaveChanges() Then
Console.WriteLine("Changes saved.")
End If
' Load the order's items.
order.SalesOrderDetail.Load()
' Delete the first item.
advWorksContext _
.DeleteObject(order.SalesOrderDetail.First())
' Save changes again.
If 0 < advWorksContext.SaveChanges() Then
Console.WriteLine("Changes saved.")
End If
Catch ex As InvalidOperationException
Console.WriteLine(ex.ToString())
Finally
' Explicitly dispose of the context,
' which closes the connection.
advWorksContext.Dispose()
End Try
// Define the order ID for the order we want.
int orderId = 43661;
// Create a long-running context.
AdventureWorksEntities advWorksContext =
new AdventureWorksEntities();
try
{
if (advWorksContext.Connection.State != ConnectionState.Open)
{
// Explicitly open the connection.
advWorksContext.Connection.Open();
}
// Execute a query to return an order.
SalesOrderHeader order =
advWorksContext.SalesOrderHeader.Where(
"it.SalesOrderID = @orderId", new ObjectParameter("orderId",orderId))
.Execute(MergeOption.AppendOnly).First();
// Change the status of the order.
order.Status = 1;
// Save changes.
if (0 < advWorksContext.SaveChanges())
{
Console.WriteLine("Changes saved.");
}
// Load the order's items.
order.SalesOrderDetail.Load();
// Delete the first item.
advWorksContext
.DeleteObject(order.SalesOrderDetail.First());
// Save changes again.
if (0 < advWorksContext.SaveChanges())
{
Console.WriteLine("Changes saved.");
}
}
catch (InvalidOperationException ex)
{
Console.WriteLine(ex.ToString());
}
finally
{
// Explicitly dispose of the context,
// which closes the connection.
advWorksContext.Dispose();
}
См. также
Задачи
Как управлять соединением в длительно существующем контексте объекта (платформа Entity Framework)
Как вручную открыть соединение из контекста объекта (платформа Entity Framework)