Я использую контейнер NInject для Dependency Injection и Entity Framework Core в качестве ORM.Настройка выглядит следующим образом:
Класс контекста БД
public TarantoContext()
{
}
public TarantoContext(DbContextOptions<TarantoContext> options)
: base(options)
{
}
public virtual DbSet<FileData> FileData { get; set; }
public virtual DbSet<FileExport> FileExport { get; set; }
public virtual DbSet<FileStatus> FileStatus { get; set; }
public virtual DbSet<FileType> FileType { get; set; }
public static string ConnectionString { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
if (!optionsBuilder.IsConfigured)
{
optionsBuilder.UseSqlServer(ConnectionString);
}
}
Program.cs
TarantoContext.ConnectionString = configurationManager.DatabaseConnection;
Я читаю конфигурацию из json и передаю ее на уровень DataAccess(к контекстному классу).У меня есть несколько таблиц в моей базе данных, и, используя первый подход к базе данных, я создал необходимые модели данных и выполнил код класса dbcontext.Я могу получить данные без проблем.Теперь я хочу добавить миграцию (я могу внести дополнительные изменения в существующие таблицы и создать новые таблицы) и запустить в консоли диспетчера пакетов следующее:
Add-Migration InitialCreate
, что привело к следующей ошибке, так как свойство connectionstringимеет значение null
Я могу исправить это путем жесткого кодирования строки подключения в методе OnConfiguring, который я без проблем пробовал:
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
if (!optionsBuilder.IsConfigured)
{
// The connection string needs to exist in the migration project for the purpose of migrations. Comment it in production.
optionsBuilder.UseSqlServer(
"Data Source=temp;Initial Catalog=Demo;Persist Security Info=True;User ID=temp;Password=temp;MultipleActiveResultSets=True;");
//optionsBuilder.UseSqlServer(ConnectionString);
}
}
но я не думаю, что это правильный способ выполнения миграций.Более того, я не уверен, как обрабатывать миграции в продуктах, если я не могу установить строку подключения в Program.cs или вне класса dbcontext.Что меня интересует, так это изучение любого шаблона проектирования, который другие разработчики используют для решения этой ситуации.Любой совет с благодарностью.