# ब्लॉग पोस्ट के लिए एंटिटी फ्रेमवर्क जोड़ना (Pt

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

# परिचय

अब इस ब्लॉग को Entity Framework का उपयोग कर चल रहा है मैं नए पोस्ट और भाषाएँ आसानी से जोड़ सकता हूँ

इस पोस्ट में मैं इस प्रक्रिया के लिए कुछ छोटे जोड़े जो मैंने किया है और कैसे यह भविष्य में सुधारों को सक्षम करता है

[TOC]

भाग देखें [1](/blog/addingentityframeworkforblogpostspt1), [2](/blog/addingentityframeworkforblogpostspt2), [3](/blog/addingentityframeworkforblogpostspt3) , [4](/blog/addingentityframeworkforblogpostspt4) और [5](/blog/addingentityframeworkforblogpostspt5) पिछले चरणों के लिए

# पृष्ठभूमि अद्यतन

ईएफ में जाने के साथ मेरे सामने एक समस्या यह थी कि मैं साइट अद्यतन करने की प्रक्रिया को बनाए रखता रहा और साइट अद्यतनी को लंबित नहीं करता।

पिछले भागों में मैंने दिखाया है कि कैसे मैं एक का उपयोग किया `MarkdownBlogService` ब्लॉग पोस्ट और भाषाओं को प्राप्त करने के लिए. यह सेवा हमारे नियंत्रकों और दृश्यों में इंजेक्शन किया गया था। `BlogViewModels`.

अद्यतन प्रक्रिया निम्नलिखित है

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

```

पृष्ठभूमि अद्यतन जब साइट ASP में आरंभ होता है अनुमति देने के लिए मैं एक का उपयोग करता हूँ `IHostedService` नए फ़ाइलों की जाँच करने और डाटाबेस में उन्हें जोड़ने के लिए

यह बहुत सरल है और यह सब नीचे करता है

```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)
    {
        
    }
}
```

ध्यान दें कि एक महत्वपूर्ण पहलू यहाँ है कि एफ इस बारे में बहुत चुनेदार है `IServiceScopeFactory` सेवा के लिए एक नए क्षेत्र का सृजन करने के लिए
के उपयोग `IServiceScopeFactory` ASP में एक आम पैटर्न है जब आपको एकलटोन सेवा में एक स्कोप सेवा का उपयोग करने की आवश्यकता होती है

मैं भी उपयोग करना था `Task.Run` एक नई थ्रेड में कार्य चलाने के लिए `IHostedService` मुख्य थ्रेड पर चलाता है और मैं नहीं था

यह है `BackgroundEFBlogUpdater` वर्ग. यह' का प्रयोग करके इंजेक्शन किया गया है `SetupBlog` विस्तार विधि जो मैंने पहले दिखाया था

```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>();
    }
```

विशेष रूप से यह लाइन `services.AddHostedService<BackgroundEFBlogUpdater>();`
ASP में यह एक नया होस्टेड सर्विस आरंभ करता है जो पृष्ठभूमि में चलता है

यह आपके ASP में पृष्ठभूमि प्रक्रमण को जोड़ने का एक सरल तरीका है

# अंत में

इस पोस्ट में मैंने दिखाया कि कैसे मैने अपने ASP को एक पृष्ठभूमि सेवा जोड़ी है।