实体框架核心:如何从DbContext获取连接?

时间:2017-01-30 12:17:04

标签: .net-core entity-framework-core

我正在使用MySQL Connector尝试新的Entity Framework Core。

我可以获得有效的DbContext并写入数据库,以便所有内容都已正确设置。

我需要从Connection获取DbContext,因为我必须在应用程序中使用connection.Open()语句中的try进行测试。如果没有有效连接,控制台应用程序应尝试启动MySQL服务器并重试。

如何从Connection获取DbContext

context.Connection之前的EF6之前。 EF6之后的context.Database.Connection

似乎最新版本已从EFCore中删除。

2 个答案:

答案 0 :(得分:29)

Microsoft.EntityFrameworkCore.Relationalhttps://www.nuget.org/packages/Microsoft.EntityFrameworkCore.Relational/)包为此提供了扩展方法 - 您可以使用dbContext.Database.OpenConnection()dbContext.Database.GetDbConnection()来获取DbConnection对象。

注意:如果您安装了Microsoft.EntityFrameworkCore.SqlServer,那么您不必明确安装此软件包

答案 1 :(得分:1)

您可以执行以下操作:

  1. 如果您使用 System.Data.SqlClient,请将其更改为 Microsoft.Data.SqlCLient,因为后面的库将接受来自 EntityFramework 和 EntityFrameWorkCore 中的 DBContext 对象的显式转换。
  2. 从 DBContext 连接创建一个命令并将其转换为您的 SQLCommand
using (SqlCommand cmd = (SqlCommand)database.GetDbConnection().CreateCommand())
  1. 检查连接状态并在必要时打开它。
if (cmd.Connection.State != ConnectionState.Open)
{
    cmd.Connection.Open();
}
  1. 如果 DBContext 中有事务,请将其添加到命令中。
if (database.CurrentTransaction != null)
{
    cmd.Transaction = database.CurrentTransaction.GetDbTransaction();
}

通过这样做,您将避免在上下文之外使用命令时可能出现的任何问题。