Как получить ConnectionString из EF7 DbContext

asp.net-core asp.net-core-mvc c# entity-framework-core

Вопрос

Мой сценарий:

Я использую EF7 для стандартных операций CRUD и Dapper для более сложных запросов, требующих увеличения скорости. Начиная с startup.cs я DbContext свой DbContext в свой DAL, который, очевидно, выполняет запросы к базе данных. Для Dapper требуется строка подключения. Я хочу ввести строку подключения Eb7 DbContext в запрос Dapper.

Мой вопрос:

Как получить строку соединения из DbContext, как и раньше: DbContext.Database.Connection ?

Он изменился с Database на DatabaseFacade в EF7, и с этим было DbConnection Connection .

Неужели в DbContext должна быть какая-то постоянная строка DbContext которую я могу запросить?

Мое исследование:

Метод, который я использую в данный момент, работает, и он работает:

public partial class CustomContext : DbContext
{
    public readonly string _connectionString;

    public CustomContext (DbContextOptions options)
        : base(options)
    {
            _connectionString = ((SqlServerOptionsExtension)options.Extensions.First()).ConnectionString;
    }
}

Я знаю, что он все еще в бета-версии, но я чего-то не хватает?

Спасибо за ваше время.

Принятый ответ

Я искал источники EF7, и кажется, что вы правы с вашим текущим подходом.

Строка подключения хранится в SqlServerOptionsExtension . Когда вы вызываете UseSqlServer(connectionString) код выглядит следующим образом (извлекаются только интересные строки):

var extension = options.FindExtension<SqlServerOptionsExtension>()
extension.ConnectionString = connectionString;

Я не уверен, почему строка соединения была удалена с очевидного места, но может быть, что разработчики абстрагировали строку подключения, чтобы мы могли использовать нестандартные базы данных (например, в базе данных и т. Д.).

Это выглядит намного яснее ИМО:

Configuration.Get("Data:ConnectionString")

Популярные ответы

Если у вас есть полностью материализованный контекст, вы также можете использовать это:

 var conn = context.Database.GetDbConnection();
 ConnectionString = conn?.ConnectionString;
 conn?.Dispose();


Related

Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему