Как я могу реализовать строку подключения 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"))
);
Нужна ли мне такая услуга в моем стартапе?КС?
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