47

我们使用 Entity Framework 5,但还需要使用来自应用程序的普通数据库连接来执行我们需要执行的一些自定义 SQL。

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

所以:

SqlConnection cnn;
connetionString = "Data Source=ServerName;Initial Catalog=DatabaseName;User ID=UserName;Password=Password"

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

4

10 回答 10

97

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

MyDbContext.Database.Connection.ConnectionString

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

于 2012-10-22T01:53:39.990 回答
42

以下是在 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

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

于 2016-04-13T14:45:23.450 回答
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;
}
于 2013-02-25T16:44:32.050 回答
11

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

EntityConnectionStringBuilder conn = 
    new EntityConnectionStringBuilder(DBEntities.dbConnection);
SqlConnection s = new SqlConnection(conn.ProviderConnectionString);
于 2015-02-18T14:13:42.107 回答
10

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

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

var YourContext = new YourContext(SqlConnection, true);
于 2012-10-22T01:23:38.717 回答
9

//实体框架5

myContext.Database.Connection.ConnectionString

//实体框架6

myContext.Database.Connection.ConnectionString

//实体框架核心1

myContext.Database.GetDbConnection().ConnectionString
于 2019-09-24T06:02:56.707 回答
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();
于 2016-10-10T16:47:35.233 回答
4

希望能帮助到你..

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

    public CommonService(ApplicationDbContext applicationDbContext)
    {
        _applicationDbContext = applicationDbContext;
        connectionString = _applicationDbContext.Database.GetDbConnection().ConnectionString;
    }
于 2018-02-22T12:24:08.107 回答
2

这是获取连接字符串的通用方法:

   public string GetConnString<T>(T ent)
            where T : ObjectContext
        {
            EntityConnection ec = (EntityConnection)ent.Connection;
            SqlConnection sc = (SqlConnection)ec.StoreConnection;
            return sc.ConnectionString;
        }

然后使用它是:

 MyEntities ent = new MyEntities();
 String ConnString = GetConnString(ent);
于 2014-05-29T20:43:44.920 回答
1

在我的情况下,我只需要执行一个更新语句,所以我使用了以下构造

_db.Database.ExecuteSqlCommand($"update ChiusureTurni set esportato = 1 where idChiusuraTurni = {idChiusura}");

where _db is my db context in this case I took advatage of transaction management

于 2020-10-03T07:12:00.177 回答