Получить строку подключения Entity Framework
Мы используем Entity Framework 5, но у нас есть требование, чтобы ТАКЖЕ использовать обычное соединение с базой данных из приложения для некоторого настраиваемого SQL, который нам нужно выполнить.
Итак, я создаю класс DatabaseAccess, который обрабатывает это соединение. Есть ли способ, которым я могу заполнить строку подключения, проверив строку подключения Entity Framework?
Итак:
SqlConnection cnn;
connetionString = "Data Source=ServerName;Initial Catalog=DatabaseName;User ID=UserName;Password=Password"
Могу ли я создать это из проверки Entity Framework?
Ответы
Ответ 1
Вы имеете в виду, можете ли вы использовать SqlConnection с EF DbContext?
Класс DbContext имеет конструктор где вы можете передать SqlConnection, а затем сообщить EF, принадлежит ли ему это.
var YourContext = new YourContext(SqlConnection, true);
Ответ 2
Вы можете получить строку соединения, используемую EF, используя следующее:
MyDbContext.Database.Connection.ConnectionString
Или, как отмечают, вы можете инициализировать контекст с помощью sqlconnection
Ответ 3
Здесь, как получить строку соединения в 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/
Ответ 4
Да, вы можете.
Смотрите здесь для 3 вариантов.
1 - используйте отдельную строку соединения для каждого
2 - извлеките его из объекта объекта (это то, что я думаю, что вы хотите)
3 - используйте объект entity для выполнения пользовательского 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;
}
Ответ 5
даже в EF3 вы можете использовать EntityConnectionStringBuilder.
EntityConnectionStringBuilder conn =
new EntityConnectionStringBuilder(DBEntities.dbConnection);
SqlConnection s = new SqlConnection(conn.ProviderConnectionString);
Ответ 6
У меня тоже была эта проблема, чтобы решить эту проблему:
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();
Ответ 7
Надеюсь, это поможет..
private readonly ApplicationDbContext _applicationDbContext;
string connectionString = string.Empty;
public CommonService(ApplicationDbContext applicationDbContext)
{
_applicationDbContext = applicationDbContext;
connectionString = _applicationDbContext.Database.GetDbConnection().ConnectionString;
}
Ответ 8
Вот общий способ получения строки подключения:
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);
Ответ 9
//Entity Framework 5
myContext.Database.Connection.ConnectionString
//Entity Framework 6
myContext.Database.Connection.ConnectionString
//Entity Framework Core 1
myContext.Database.GetDbConnection().ConnectionString