A e gjeni ndonjëherë veten duke ndërtuar një aplikacion të ri dhe keni nevojë për të dhëna testimi që duken dhe duken më realiste ose një grup i madh të dhënash për performancën e ngarkesës. Epo mos kërkoni më tej, unë kam një zgjidhje për ju!

Kohët e fundit kam hasur në një bibliotekë të quajtur "Bogus". Kjo bibliotekë është shumë e hollë dhe minimale për t'u konfiguruar, por ofron skenarë të fuqishëm dhe të fuqishëm të të dhënave për shumicën e rasteve të përdorimit që mund të hasni. Gjeneruesit e të dhënave që kam përdorur në të kaluarën kanë qenë të rëndë për të punuar me të dhe janë mbështetur te zhvilluesi për të koduar kontekstin e të dhënave. Bogus i bën të gjitha këto me opsionet e tyre të Rregullave. Unë dua ta mbaj këtë blog të shkurtër dhe të saktë, kështu që lexoni më tej për të parë parakushtet dhe konfigurimin për ta nisur shpejt dhe funksionuar.

Kushtet paraprake

Visual Studio 2022

SQL DB

SSMS

Neto 6 ose më shumë

Korniza e subjektit 6 ose më e lartë

Referojuni këtu për listën e plotë të të gjitha varësive nëse rasti juaj i përdorimit është i ndryshëm nga kornizat e përmendura më sipër.

Shpjegimi i mëposhtëm i konfigurimit është rreptësisht në konfigurimin e Bogus. Ky blog nuk është për të ilustruar se si të konfiguroni Entity Framework dhe një SQL DB.

Konfigurimi

Në projektin tuaj të shtresës së aksesit të të dhënave brenda zgjidhjes suaj, do t'ju nevojiten paketat e mëposhtme në këtë version minimal.

Në të njëjtin projekt Shtresa e Qasjes së të Dhënave shtoni një klasë të re të quajtur "DataGenerator.cs" — ose çfarëdo emri të zbatueshëm që dëshironi.

DataGenerator.cs

Kjo klasë do të mbajë kodin për të konfiguruar Rregullat dhe përshkrimet në modelet e domenit të falsifikuar. Konteksti i bazës së të dhënave të kornizës së entitetit duhet të injektohet në këtë klasë për qasje në repo. Më poshtë mund të shihni një shembull të thjeshtë të një grupi rregullash për një model të falsifikuar për entitetin e klientit nga një SQL DB që kam krijuar për këtë shembull.

using Bogus;

namespace BogusDataGenerator.Data;

public class DataGenerator
{
    private readonly BogusDataExampleContext _context;

    public DataGenerator(BogusDataExampleContext context)
    {
        _context = context;
    }

    public async Task Clear()
    {
        _context.Customers.RemoveRange(_context.Customers);
        await _context.SaveChangesAsync();
    }

    public async Task Generate()
    {
        var fakeCustomer = new Faker<Customer>()
            .RuleFor(x => x.FirstName, y => y.Name.FirstName())
            .RuleFor(x => x.LastName, y => y.Name.LastName())
            .RuleFor(x => x.City, y => y.Address.City())
            .RuleFor(x => x.State, y => y.Address.State())
            .RuleFor(x => x.ZipCode, y => y.Address.ZipCode())
            .RuleFor(x => x.Phone, y => y.Phone.PhoneNumber())
            .RuleFor(x => x.JobTitle, y => y.Name.JobTitle())
            .RuleFor(x => x.CreatedBy, "BogusDataGenerator.Api");

        var fakeCustomerList = fakeCustomer.Generate(1000);

        await _context.Customers.AddRangeAsync(fakeCustomerList);
        await _context.SaveChangesAsync();
    }
}

Brenda RuleFor(), këtu duhet të çiftohet se çfarë kolone me cilat të dhëna të falsifikuara dhe çfarë lloji të të dhënave.

E para RuleFor(), y.Name.FirstName(), kjo ekziston si një pikë të dhënash brenda Bogus. Pra, për rastin tim të përdorimit të treguar më duhet një vlerë FirstName, kështu që zgjodha y.Name.FirstName() për të gjeneruar një emër të parë të falsifikuar rastësisht për t'u lidhur me in tim të vërtetë Kolona >FirstNamenë tabelën time SQL.

Ka shumë shembuj të ndryshëm të paracaktuar, të botës reale të llojeve të të dhënave për të gjeneruar dhe hartuar. Ju mund t'i eksploroni ato për t'iu përshtatur rastit tuaj të përdorimit.

fakeCustomer.Generate(1000) ju lejon të kontrolloni saktësisht se sa regjistrime dëshironi të krijohen; secila do të jetë e ndryshme. Ekzistojnë opsione të ndryshme se sa të gjeneroni që mund t'i eksploroni për rastin tuaj të përdorimit.

Metoda e quajtur Clear() thjesht i thotë Entity Framework që të pastrojë të gjitha të dhënat. Personalizojeni këtë për nevojat tuaja.

Po regjistrohet gjeneratori i të dhënave

Tani që keni konfigurimin DataGenerator nga pikëpamja e klasës/kodit/rregullave, tani do t'ju duhet ta regjistroni këtë klasë dhe ta bëni të aksesueshme për përdorim.

Në skedarin Program.cs, shtoni këtë rresht kodi. Kjo linjë duhet të shkojë përpara thirrjes builder.Build().

builder.Services.AddScoped<DataGenerator>();

API minimale

.Net 6 solli një veçori të njohur si API minimale. Kjo lejon krijimin e një pike përfundimtare pa të gjitha ceremonitë dhe konfigurimin e klasave të Controller dhe është shumë minimale në kod për të filluar punën.

Këtu është një "Microsoft Link" për t'u zhytur më thellë në këtë.

Për krijimin e këtyre të dhënave false, ky është një rast i shkëlqyeshëm përdorimi për të shfrytëzuar këtë koncept minimal API.

Në klasën Program.cs, menjëherë sipër aplikacionit.Run() shtoni kodin e mëposhtëm.

app.MapPost("/api/fakedata/generate", async (DataGenerator generator) =>
{
    await generator.Generate();
    return Results.Ok();
});

app.MapDelete("/api/fakedata/clear", async (DataGenerator generator) =>
{
    await generator.Clear();
    return Results.NoContent();
});

Swagger UI

Tani, pas gjithë atij konfigurimi kur e ekzekutoni aplikacionin në nivel lokal (në mjedisin e Zhvilluesit), tani duhet të shihni këto dy pika të reja fundore. Përdorini ato ashtu si çdo pikë tjetër fundore në një faqe Swagger për t'i ekzekutuar ato.

SSMS dhe SQL

Identifikohu në LocalDB-në tënde nëpërmjet SSMS dhe drejto një pyetje “SELECT * FROM Customer” për të parë se çfarë të dhënash ke. Nëse nuk e keni përdorur Faqen Swagger për të aktivizuar Gjenerimin e të Dhënave, atëherë bëjeni tani ose bëni Veprimin Fshi për të pastruar të dhënat.

Nëse keni të dhëna, atëherë duhet të duket diçka si kjo.

Përfundim

Falsifikimi lejon një mënyrë shumë të lehtë dhe të shpejtë për të inkorporuar gjenerimin e të dhënave të rreme për ndërtim dhe testim. Kjo ka të bëjë me konfigurimin më të lehtë që kam përdorur ndonjëherë për këtë temë, dhe shpresoj që ta gjeni përdorimin e kësaj në projektin tuaj të ardhshëm!

Repos

Unë kam një shembull pune për këtë në GitHub-in tim të vendosur "këtu". Ndiqni ReadMe për konfigurim.

Për të mësuar më shumë rreth Bogus dhe veçorive të tij të fuqishme, ju lutemi shikoni GitHub për të këtu.

Faleminderit për leximin dhe kodimin e lumtur!

Rreth meje

Unë jam Themeluesi/CEO i PalmettoCloud, Inxhinier/Arkitek kryesor i softuerit në ScanSource dhe një Jedi BBQ.

Mund të gjeni më shumë rreth meje këtu në faqen time personale dhe në LinkedIn!

Për nevojat tuaja të softuerit të personalizuar, ju lutemi na shikoni në PalmettoCloud!