Я хочу создать фиктивные данные, которые буду загружать из файла json. Мне нужно получить путь к файлу, из моих исследований я обнаружил, что мне нужен IHostingEnvironment, но я не уверен, как получить свойство в моем файле класса DbContext.
IHostingEnvironment, как передать OnModelCreating?
18.06.2018
- Вместо того, чтобы добавлять заполнение данных непосредственно в контекст (и смешивать схему с данными), можно ли было бы использовать внешний класс Initializer, аналогичный приведенному здесь примеру: ссылка 18.06.2018
- Я все равно согласен делать это, это лучшая практика, и это позволит мне получить доступ к пути к файлу. Я просмотрел ссылку, но не вижу serviceProvider.GetRequiredService ‹WebMarksDbContext› (); когда я пытаюсь использовать IServiceProvider 18.06.2018
Ответы:
1
Если бы вместо этого вы использовали внешний класс «Инициализатор» (по крайней мере, в контексте приложения ASP.NET Core), вы могли бы сделать что-то вроде этого:
DbContext класс:
public class SampleDbContext : Microsoft.EntityFrameworkCore.DbContext {
public SampleDbContext(DbContextOptions<SampleDbContext> options) : base(options) { }
public DbSet<SampleRecord> SampleRecords { get; set; }
//...Other DB structure here
protected override void OnModelCreating(ModelBuilder modelBuilder) {
//...
}
}
Класс инициализатора:
public static void Initialize(SampleDbContext context, var JSONStringOrObj) {
context.Database.EnsureCreated();
//Data seeding sample
if(!context.SampleRecords.Any()) {
context.SampleTable.AddRange(new SampleTable[]
{
new SampleRecord() { SampleData = "Test1" },
new SampleRecord() { SampleData = "Test2" },
new SampleRecord() { SampleData = "Test3" },
new SampleRecord() { SampleData = "Test4" }
});
}
//Extract seed data from JSON and add to proper DbSet ...
context.SaveChanges();
}
Startup.cs:
public class Startup {
public IHostingEnvironment HostingEnvironment { get; }
public Startup(IHostingEnvironment env) {
//...
HostingEnvironment = env;
//...
}
public void ConfigureServices(IServiceCollection services) {
//...
services.AddDbContext<SampleDbContext>(/*Your options here*/);
services.AddSingleton<IHostingEnvironment>(HostingEnvironment);
//...
}
//... Rest of class
}
Program.cs:
public class Program {
public static void Main(string[] args) {
var host = CreateWebHostBuilder(args).Build()
using (var scope = host.Services.CreateScope()) {
var services = scope.ServiceProvider;
var hostingEnvironment = services.GetService<IHostingEnvironment>();
//... do whatever you need to get your JSON file here (var jsonData = ...)
var sampleDbContext = services.GetService<SampleDbContext>();
Initializer.Initialize(sampleDbContext, jsonData);
}
host.Run();
}
//... Rest of class
}
Начальные данные останутся отдельно от вашей схемы и будут загружены в базу данных при запуске вашего приложения. Вы также можете вызвать инициализатор из тестового кода (или нет, если вы хотите поместить определенные тестовые данные для тестов).
18.06.2018
Новые материалы
Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..
Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально
Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..
Частный метод Python: улучшение инкапсуляции и безопасности
Введение
Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..
Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования
Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..
Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv)
Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..
Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..
Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..