获取实体框架连接字符串

Cra*_*aig 34 c# entity-framework

我们使用Entity Framework 5,但是还要求从应用程序使用正常的数据库连接来执行我们需要执行的某些自定义SQL.

所以,我正在创建一个处理此连接的DatabaseAccess类.有没有办法通过检查实体框架连接字符串来填充连接字符串?

所以:

SqlConnection cnn;
connetionString = "Data Source=ServerName;Initial Catalog=DatabaseName;User ID=UserName;Password=Password"
Run Code Online (Sandbox Code Playgroud)

我可以通过检查实体框架来构建它吗?

Not*_*ple 72

您可以使用以下命令获取EF使用的连接字符串:

MyDbContext.Database.Connection.ConnectionString
Run Code Online (Sandbox Code Playgroud)

或者正如标记所说,您可以使用sqlconnection初始化上下文

  • 它不会带密码. (4认同)
  • 你好像不明白我的观点.如果您使用的是DbContext和edmx文件,那么您提到的ConnectionString属性将*NOT*包含与SqlConnection兼容的连接字符串.它将具有EntityConnection字符串,其中包含元数据字符串,而不包含元数据字符串.所以不,你的方法,如果使用DbContext和edmx文件将不允许某人获取连接字符串并将其与SqlConnection一起使用. (2认同)

Bry*_*yan 21

以下是如何获取EF 5,EF 6和EF Core 1/EF 7中的连接字符串.

//Entity Framework 5
myContext.Database.Connection.ConnectionString
//Entity Framework 6
myContext.Database.Connection.ConnectionString
//Entity Framework Core 1
myContext.Database.GetDbConnection().ConnectionString
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅 - http://nodogmablog.bryanhogan.net/2016/04/entity-framework-checking-the-connection-string-of-your-context/


Wim*_*tte 19

是的你可以.

请参阅此处了解3个选项.

1 - 为每个使用单独的连接字符串

2 - 从你的实体对象中提取它(这是我想你想要的)

3 - 使用实体对象执行自定义SQL

这是nr 2的方法:

using System.Data.EntityClient;
using System.Data.SqlClient;
...
private string GetADOConnectionString()
{
    SalesSyncEntities ctx = new SalesSyncEntities(); //create your entity object here
    EntityConnection ec = (EntityConnection)ctx.Connection;
    SqlConnection sc = (SqlConnection)ec.StoreConnection; //get the SQLConnection that your entity object would use
    string adoConnStr = sc.ConnectionString;
    return adoConnStr;
}
Run Code Online (Sandbox Code Playgroud)

  • 难道你不能只使用`ctx.Connection.ConnectionString`? (2认同)

gbj*_*anb 9

即使在EF3中,您也可以使用EntityConnectionStringBuilder.

EntityConnectionStringBuilder conn = 
    new EntityConnectionStringBuilder(DBEntities.dbConnection);
SqlConnection s = new SqlConnection(conn.ProviderConnectionString);
Run Code Online (Sandbox Code Playgroud)


Mar*_*eta 8

你的意思是,你可以在你的EF DbContext中使用SqlConnection吗?

DbContext类有一个构造函数,您可以在其中传入SqlConnection,然后告诉EF它是否拥有它.

var YourContext = new YourContext(SqlConnection, true);
Run Code Online (Sandbox Code Playgroud)

  • 这假设它是一个DbContext,这不是大多数人使用VS2010或2008的默认值.ObjectContext没有这样的构造函数. (5认同)

Baa*_*ali 8

//实体框架5

myContext.Database.Connection.ConnectionString
Run Code Online (Sandbox Code Playgroud)

//实体框架6

myContext.Database.Connection.ConnectionString
Run Code Online (Sandbox Code Playgroud)

//实体框架核心1

myContext.Database.GetDbConnection().ConnectionString
Run Code Online (Sandbox Code Playgroud)

  • 我需要 EF 6: myContext.Database.GetConnectionString() (2认同)

小智 6

希望能帮助到你..

    private readonly ApplicationDbContext _applicationDbContext;
    string connectionString = string.Empty;

    public CommonService(ApplicationDbContext applicationDbContext)
    {
        _applicationDbContext = applicationDbContext;
        connectionString = _applicationDbContext.Database.GetDbConnection().ConnectionString;
    }
Run Code Online (Sandbox Code Playgroud)


小智 5

我也遇到了这个问题,要解决此问题,您可以执行以下操作:

        SqlConnection con = context.Database.Connection as SqlConnection;
        SqlCommand command = new SqlCommand(sql, con);
        con.Open();

        SqlDataReader reader = command.ExecuteReader();
        while (reader.HasRows)
        {
            while (reader.Read())
            {
                //read your fields
            }

            reader.NextResult();
        }

        con.Close();
Run Code Online (Sandbox Code Playgroud)