Как я могу реализовать строку подключения DbContext in.NET ядро?



Моя ситуация очень похожа на эту ссылку или, по крайней мере, мой код похож, и я пытаюсь найти способ применить этот же метод в синтаксисе .NET Core.



Передать строку соединения в код-первый DbContext



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



public partial class CompanyFormsContext : DbContext
{
public CompanyFormsContext()
: base("name=CompanyFormsContext")
{
}

public CompanyFormsContext(string connName)
: base("name=" + connName)
{
}
...
}


Я получаю ошибку, говоря:




Ошибка CS1503 Аргумент 1: не удается преобразовать из 'string' в ' Microsoft.EntityFrameworkCore.DbContextOptions' Формы компании..NETCoreApp,версия=В1.0




Когда я перехожу через скобки в base("name=CompanyFormsContext") или base("name=" = connName).



Что такое правильный способ реализации этой функциональности .Чистая ядра?



Редактировать:



Я хотел поделиться, что у меня есть следующая информация для подключения к базе данных в моих appsettings.JSON-файл: (однако у меня нет настроек при запуске.cs)



  "Data": {
"CompanyFormsContext": {
"ConnectionString": "Server=(localdb)\projectsv13;Database=companyforms;Trusted_Connection=True;"
},
"CompanyFormsContextQA": {
"ConnectionString": "Server=(localdb)\projectsv13;Database=companyforms;Trusted_Connection=True;"
}
}


И я нашел следующую ссылку добавление DbContextOptions в Startup.cs нет Регистрация хранилища данных на веб-сайте, и мне интересно, будет ли достаточно простого protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder), чтобы исправить мое соединение или нет?



По ссылке:



services.AddEntityFramework(Configuration)
.AddSqlServer()
.AddDbContext<MyDbContext>(
options =>
options.UseSqlServer(Configuration.Get("Data:CompanyFormsContext:ConnectionString"))
);


Нужна ли мне такая услуга в моем стартапе?КС?

671   3  

3 ответов:

Другой вариант-вызвать базовый конструктор, который принимает DbContextOptions:

public BooksContext(string connectionString) : this(GetOptions(connectionString))
{
}

private static DbContextOptions GetOptions(string connectionString)
{
    return SqlServerDbContextOptionsExtensions.UseSqlServer(new DbContextOptionsBuilder(), connectionString).Options;
}

Как правило, вы хотите прочитать его из config при запуске, а затем использовать строку подключения для настройки службы Entity Framework DbContext для вашего процесса.

1) добавьте строку в свои настройки приложений.json:

"DbConnectionString": "Server=s;Database=db;Trusted_Connection=True;",

2) прочитайте строку в вашем запуске.класс cs (после запуска вызывается метод построения конфигурации-так обычно в методе ConfigureServices) выглядит следующим образом:

var connection = Configuration["DbConnectionString"];

3) при использовании Entity Framework добавьте службу контекста базы данных (MyDbContext-это класс контекста, созданный EF). Вы также хотите рассказать встроенной инъекции зависимостей, как создать экземпляр контекста базы данных:

services.AddDbContext<MyDbContext>(options => options.UseSqlServer(connection));
services.AddScoped<IMyDbContext, MyDbContext>();

Где IMyDbContext - это (в упрощенном виде) просто интерфейс, который вы извлекли из вашего MyDbContext

4) Теперь вы можете определить свой контроллер, чтобы взять MyDbContext, и DI позаботится о его создании и передаче, когда контроллер вызывается:

public MyController(IMyDbContext context)
{
    _context = context  // store for later use
}

Наилучшая практика ИМО:

Добавьте в свою конфигурацию .json :

     "ConnectionStrings": {
    "BooksContext": "Server=MyServer;Database=MyDb;Trusted_Connection=True;"
  }

И инициализировать раздел:

services.AddDbContext<BooksContext>(options => options.UseSqlServer(configuration.GetConnectionString(nameof(BooksContext))));

Comments

    Ничего не найдено.