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

<!--category-- ASP.NET, Entity Framework -->
<datetime class="hidden">2024-08-20T05:45</datetime>

# 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.

[TOC]

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](/blog/addingentityframeworkforblogpostspt1), [2](/blog/addingentityframeworkforblogpostspt2), [3](/blog/addingentityframeworkforblogpostspt3) , [4](/blog/addingentityframeworkforblogpostspt4) 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](/blog/addingentityframeworkforblogpostspt5) 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:

```mermaid
   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 :.

```csharp
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:

```csharp
    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