Back to "Añadiendo Cadre de Entidades para Posts de Blog (Pt 6)"

This is a viewer only at the moment see the article on how this works.

To update the preview hit Ctrl-Alt-R (or ⌘-Alt-R on Mac) or Enter to refresh. The Save icon lets you save the markdown file to disk

This is a preview from the server running through my markdig pipeline

ASP.NET Entity Framework

Añadiendo Cadre de Entidades para Posts de Blog (Pt 6)

Tuesday, 20 August 2024

El Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer.

Ahora que tengo este blog que se ejecuta usando Entity Framework puedo añadir nuevos mensajes y idiomas fácilmente. Solamente añadir un nuevo fichero de marcación al proyecto y comprobarlo en. La acción GitHub desencadena y el sitio está actualizadoM SK2

En este post I'cubre un par de pequeñas adiciones que he hecho a este proceso y cómo permite futuras mejoras.

El Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer. 1, 2, 3 , 4 El Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer. 5 El Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer.

El Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer.

Una de las cuestiones con que me enfrentaba al mudarme a EF era mantener mi proceso para actualizar el sitio sin retrasar la actualización del sitio. Quisiera mantener el proceso de añadir un nuevo puesto tan simple como sea posible.

En las partes anteriores he mostrado cómo he utilizado un MarkdownBlogService para obtener los mensajes de blog y las lenguas. Este servicio fue introducido en nuestros controladores y vistas. Este service era un simple servicio que leía archivos de marcación desde el disco y les devolvió como BlogViewModels.

El proceso de actualización es el siguiente:

   flowchart LR
    A[Write New Markdown File] -->|Checkin To Github| B(Github Action Triggers)
    B --> C(Builds Docker Image)
    C --> D(Watchtower Pulls new Image)
    D --> E{New Files Added?}
    E -->|Yes| F(Add File to Database)
    E -->|No| G(Skip Database Seeding)
    F --> H(Site Updated)
    G --> H(Site Updated)

Para permitir la actualización de fondo cuando el sitio comienza en ASP.NET uso un IHostedService para comprobar los nuevos archivos y añadirlos a la base de datos.

Es super simple y todo lo que hace es inferior a :.

public class BackgroundEFBlogUpdater(IServiceScopeFactory scopeFactory, ILogger<BackgroundEFBlogUpdater> logger) : IHostedService
{
    private Task _backgroundTask;
    public async Task StartAsync(CancellationToken cancellationToken)
    {
       
        var scope = scopeFactory.CreateScope();
        var context = scope.ServiceProvider.GetRequiredService<IBlogPopulator>();
        logger.LogInformation("Starting EF Blog Updater");
      
        _backgroundTask = Task.Run(async () =>    await  context.Populate(), cancellationToken);
       logger.LogInformation("EF Blog Updater Finished");
    }

    public async Task StopAsync(CancellationToken cancellationToken)
    {
        
    }
}

Nota que uno de los aspectos críticos aquí es que EF es muy selectivo en cuanto a esto's scoping. He tenido que usar IServiceScopeFactory para crear un nuevo alcance para el servicio. Esto se debe a que el servicio es un solo tonelada y EF no le gusta ser utilizado en un único tonelada. El Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer. IServiceScopeFactory es un patrón común en ASP.NET Core cuando se necesita utilizar un servicio de scoped en un servicio singleton.

También he tenido que usar Task.Run para ejecutar la tarea en un nuevo hilo. Esto es porque el IHostedService ejecuta en el hilo principal y no quería bloquear la aplicación desde el inicio.

El Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer. BackgroundEFBlogUpdater El Comité recomienda que el Estado Parte adopte todas las medidas necesarias para garantizar la igualdad de oportunidades entre hombres y mujeres en materia de empleo, incluida la eliminación del trabajo forzoso. SetupBlog método de extensión que he mostrado antes:

    public static void SetupBlog(this IServiceCollection services, IConfiguration configuration, IWebHostEnvironment env)
    {
        var config = services.ConfigurePOCO<BlogConfig>(configuration.GetSection(BlogConfig.Section));
       services.ConfigurePOCO<MarkdownConfig>(configuration.GetSection(MarkdownConfig.Section));
       services.AddScoped<CommentService>();
        switch (config.Mode)
        {
            case BlogMode.File:
                Log.Information("Using file based blog");
                services.AddScoped<IBlogService, MarkdownBlogService>();
                services.AddScoped<IBlogPopulator, MarkdownBlogPopulator>();
                break;
            case BlogMode.Database:
                Log.Information("Using Database based blog");
                services.AddDbContext<MostlylucidDbContext>(options =>
                {
                    if (env.IsDevelopment())
                    {
                        options.EnableSensitiveDataLogging(true);
                    }
                    options.UseNpgsql(configuration.GetConnectionString("DefaultConnection"));
                });
                services.AddScoped<IBlogService, EFBlogService>();
            
                services.AddScoped<IBlogPopulator, EFBlogPopulator>();
                services.AddHostedService<BackgroundEFBlogUpdater>();
                break;
        }
        services.AddScoped<IMarkdownBlogService, MarkdownBlogPopulator>();

        services.AddScoped<MarkdownRenderingService>();
    }

En el párrafo 2 de la parte dispositiva del proyecto de resolución, la Asamblea General pidió al Secretario General que le presentara en su quincuagésimo séptimo período de sesiones un informe sobre los progresos realizados en la aplicación de la presente resolución. services.AddHostedService<BackgroundEFBlogUpdater>(); En ASP.NET Core esto inicia un nuevo HostedService que se ejecuta en el fondo.

Esta es una manera sencilla de añadir procesamiento de fondo a su ASP.NET Core application.

El Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer.

En este post he mostrado cómo he añadido un servicio de fondo a mi ASP.NET Core aplicación para actualizar la base de datos con nuevos mensajes de blog

logo

© 2026 Scott Galloway — Unlicense — All content and source code on this site is free to use, copy, modify, and sell.