Entity Framework Core: campo richiesto dal provider di memoria

effort entity-framework-core

Domanda

Nelle versioni precedenti di Entity Framework ho utilizzato Effort ( https://effort.codeplex.com/ ) per le unit test. Ho deciso di fornire il nuovo provider in memoria per EF Core e ho scoperto rapidamente che non rispetta le configurazioni IsRequired () e altre entità impostate in OnModelCreating. C'è un modo per rendere onore a questa configurazione? In caso contrario, è questo in un elenco di cose da implementare? Forse anche un'alternativa nel provider di memoria?

Mi piacerebbe essere in grado di utilizzare le fasi di test per sostituire il contesto e utilizzare un db reale in alcuni scenari di test di integrazione che potrebbero sfruttare lo stesso codice. Questo sembra un "bello da avere", e forse è un caso di sforzo con EF Core. Neanche io sono riuscito a trovare nulla sullo sforzo su cui si è lavorato per l'EF Core.

Non sono riuscito a trovare nulla nella pagina Uservoice per EF ( https://data.uservoice.com/forums/72025-entity-framework-feature-suggestions ) e andremo lì se non è disponibile.

Risposta popolare

Questa domanda è stata posta qualche tempo fa, ma ho avuto la stessa domanda e sono incappato in questa domanda senza risposta. Alla fine ho trovato una risposta che funziona per me, quindi ho pensato di condividere il caso che qualcun altro si imbattesse in questo come me.

Sembra che SQLite abbia un'opzione in memoria che si comporta più come un vero database rispetto all'opzione standard UseInMemory (): https://docs.microsoft.com/en-us/ef/core/miscellaneous/testing/sqlite

L'unica differenza è stata aggiunta Microsoft.EntityFrameworkCore.Sqlite , non Microsoft.Data.Sqlite come dicono i documenti.

Non è del tutto pertinente alla domanda, ma nel mio caso specifico voglio usare una memoria mentre sto testando le funzionalità di base di un webapi su cui sto lavorando, ma voglio ancora essere in grado di testare vincoli unici, ecc. è ciò che ho aggiunto per implementare il database in memoria.

All'interno di Configure Services:

services.AddDbContext<MyDbContext>(options =>
{
    var liteConn = new SqliteConnection("DataSource=:memory:");
    liteConn.Open();

    options
        .UseSqlite(liteConn)
        .ConfigureWarnings(warnings =>
        {
            warnings.Throw(RelationalEventId.QueryClientEvaluationWarning);
            warnings.Log(RelationalEventId.ExecutedCommand);
        });
});

All'interno di Configura:

services.AddDbContext<MyDbContext>(options =>
{
    var liteConn = new SqliteConnection("DataSource=:memory:");
    liteConn.Open();

    options
        .UseSqlite(liteConn)
        .ConfigureWarnings(warnings =>
        {
            warnings.Throw(RelationalEventId.QueryClientEvaluationWarning);
            warnings.Log(RelationalEventId.ExecutedCommand);
        });
});



Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché