Nano Hash - криптовалюты, майнинг, программирование

IHostingEnvironment, как передать OnModelCreating?

Я хочу создать фиктивные данные, которые буду загружать из файла json. Мне нужно получить путь к файлу, из моих исследований я обнаружил, что мне нужен IHostingEnvironment, но я не уверен, как получить свойство в моем файле класса DbContext.


  • Вместо того, чтобы добавлять заполнение данных непосредственно в контекст (и смешивать схему с данными), можно ли было бы использовать внешний класс 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
  • Я использую .net core 2.1, похоже, у меня нет host.Services.CreateScope () 19.06.2018
  • Да, похоже, что 2.1 использует IWebHostBuilder вместо IWebHost, я, должно быть, прочитал неправильную версию в теге. Похоже, вы можете получить экземпляр IWebHost с помощью IWebHostBuilder.Build (), поэтому вы можете использовать IWebHostBuilder.Build (). Services.CreateScope ()? 19.06.2018
  • Нет, в сборке есть службы, но нет CreateScope. 19.06.2018
  • Возможно, вам потребуется импортировать ServiceProviderServiceExtensions 19.06.2018
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..