Как получить ConnectionString из EF7 DbContext
Мой сценарий:
Я использую EF7 для стандартных операций CRUD и Dapper для более сложных запросов, требующих увеличения скорости. Начиная с startup.cs, я вставляю свой DbContext
в свой DAL, который, очевидно, выполняет запросы к базе данных. Для Dapper требуется строка подключения. Я хочу ввести строку подключения Eb7 DbContext в запрос Dapper.
Мой вопрос:
Как получить строку соединения из DbContext, как раньше: DbContext.Database.Connection
?
Он изменился с Database
на DatabaseFacade
в EF7, и с этим также удалился DbConnection Connection
.
Возможно, в DbContext
должна быть какая-то постоянная строка соединения, которую я могу запросить?
Мои исследования:
Метод, который я использую в данный момент, работает, и он работает:
public partial class CustomContext : DbContext
{
public readonly string _connectionString;
public CustomContext (DbContextOptions options)
: base(options)
{
_connectionString = ((SqlServerOptionsExtension)options.Extensions.First()).ConnectionString;
}
}
Я знаю его все еще в бета-версии, но я что-то упускаю?
Спасибо за ваше время.
Ответы
Ответ 1
Я искал EF7 источники и кажется, что вы правы с вашим текущим подходом.
Строка подключения хранится в SqlServerOptionsExtension
. Когда вы вызываете UseSqlServer(connectionString)
код следующим образом (извлекаете только интересные строки):
var extension = options.FindExtension<SqlServerOptionsExtension>()
extension.ConnectionString = connectionString;
Я не уверен, почему строка подключения была удалена с очевидного места, но может быть, что разработчики отменили строку подключения, чтобы мы могли использовать нестандартные базы данных (например, в базе данных и т.д.).
Это выглядит намного яснее IMO:
Configuration.Get("Data:ConnectionString")
Ответ 2
Если у вас есть полностью материализованный контекст, вы также можете использовать это:
var conn = context.Database.GetDbConnection();
ConnectionString = conn?.ConnectionString;
conn?.Dispose();