Поделиться через


Управление соединениями в службах объектов (платформа Entity Framework)

По умолчанию службы объектов управляют соединением с базой данных. Соединения открываются только по требованию, например чтобы выполнить запрос или вызвать метод SaveChanges. После завершения операции службы объектов закрывают соединение.

Вызов любого из следующих методов открывает соединение:

Службы объектов предоставляют доступ к сущности EntityConnection через свойство Connection. Это позволяет управлять соединением и транзакциями или предоставить собственное соединение EntityConnection. Это полезно, если нужно удерживать открытым соединение в краткосрочном контексте объекта, чтобы повысить производительность или явно управлять транзакциями. Соединение с поставщиком, используемое Entity Framework, можно совместно использовать и в других частях приложения.

При управлении соединениями следует принимать во внимание следующие соображения.

  • Контекст объекта откроет соединение, если оно не было открыто до операции. Если контекст объекта открывает соединение во время операции, то оно будет закрыто при завершении операции.

  • Если соединение открыто вручную, то контекст объекта не закроет его. Соединение будет закрыто при вызове метода Close или метода Dispose.

  • Если контекст объекта создает соединение, это соединение всегда удаляется после удаления объекта.

  • В продолжительном контексте объекта необходимо обеспечить удаление контекста, когда он перестанет быть нужным.

  • Если предоставить соединение EntityConnection для контекста объекта, то необходимо обеспечить его удаление.

В следующем примере показано, как явно открыть соединение:

' Explicitly open the connection.
advWorksContext.Connection.Open()
// Explicitly open the connection.    
advWorksContext.Connection.Open();

Дополнительные сведения см. в разделе Как вручную открыть соединение из контекста объекта (платформа Entity Framework).

При открытии соединения вручную в продолжительном контексте объекта необходимо вызвать метод Dispose, чтобы закрыть соединение, когда контекст перестанет быть нужным. Можно также вызвать метод Close для объекта EntityConnection, чтобы явно закрыть соединение. Дополнительные сведения см. в разделе Как управлять соединением в длительно существующем контексте объекта (платформа Entity Framework).

Службы объектов также позволяют создать соединение EntityConnection и предоставить его контексту объекта. В этом случае можно открывать соединение вручную или предоставить контексту объекта право открывать его при необходимости. Если контексту объекта предоставлено соединение EntityConnection, необходимо обеспечить удаление как контекста объекта, так и соединения EntityConnection, когда они перестанут быть нужными. В следующем примере создается соединение и передается контексту объекта.

' Create an EntityConnection.
Dim conn As New EntityConnection("name=AdventureWorksEntities")

' Create a long-running context with the connection.
Dim advWorksContext As New AdventureWorksEntities(conn)
// Create an EntityConnection.
EntityConnection conn =
    new EntityConnection("name=AdventureWorksEntities");

// Create a long-running context with the connection.
AdventureWorksEntities advWorksContext =
    new AdventureWorksEntities(conn);

Дополнительные сведения см. в разделе Как использовать класс EntityConnection с контекстом объекта (платформа Entity Framework).

См. также

Другие ресурсы

Управление контекстом объекта (платформа Entity Framework)