Entity Framework Core - Champ obligatoire du fournisseur en mémoire


Question

Dans les versions précédentes d'Entity Framework, j'utilisais Effort ( https://effort.codeplex.com/ ) pour les tests unitaires. J'ai décidé de donner le nouveau fournisseur de mémoire pour EF Core et j'ai rapidement constaté qu'il ne respectait pas les configurations IsRequired () et d'autres entités définies dans OnModelCreating. Y a-t-il un moyen de le faire respecter cette configuration? Si non, est-ce sur une liste de tâches à mettre en œuvre? Peut-être même une alternative dans le fournisseur de mémoire?

J'aimerais pouvoir utiliser les étapes de test pour échanger le contexte et utiliser une vraie base de données dans certains scénarios de test d'intégration pouvant exploiter le même code. Cela semble être un "plaisir à avoir", et peut-être est-ce un cas à justifier avec EF Core. Je n'ai encore rien trouvé sur les efforts déployés pour EF Core.

Je n'ai rien trouvé sur la page Uservoice pour EF ( https://data.uservoice.com/forums/72025-entity-framework-feature-suggestions ) et j'y irai ensuite si elle n'est pas disponible.

Réponse populaire

Cette question a été posée il y a longtemps, mais j'avais la même question et je suis tombé sur cette question sans réponse. J'ai fini par trouver une réponse qui fonctionne pour moi, alors j'ai pensé partager mon expérience si quelqu'un d'autre rencontrait cela comme moi.

Il semble que SQLite ait une option en mémoire qui se comporte davantage comme une vraie base de données que l’option standard UseInMemory (): https://docs.microsoft.com/en-us/ef/core/misc Miscellaneous/testing/sqlite

La seule différence était que j'ai ajouté Microsoft.EntityFrameworkCore.Sqlite , et non pas Microsoft.Data.Sqlite comme le dit la documentation.

Pas tout à fait pertinent pour la question, mais dans mon cas particulier, je souhaite utiliser une mémoire en mémoire pendant que je teste les fonctionnalités de base d'un Webapi sur lequel je travaille, mais je souhaite tout de même pouvoir tester des contraintes uniques, etc. est ce que j'ai ajouté pour implémenter la base de données en mémoire.

Dans 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);
        });
});

Dans Configure:

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




Sous licence: CC-BY-SA
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi