Entity Framework Core - Im Speicheranbieter Pflichtfeld


Frage

In früheren Versionen von Entity Framework habe ich Effort ( https://effort.codeplex.com/ ) für Komponententests verwendet. Ich entschied mich, den neuen Speicheranbieter für EF Core anzugeben und fand schnell heraus, dass die IsRequired () - und andere Entitätskonfigurationen, die in OnModelCreating festgelegt wurden, nicht berücksichtigt wurden. Gibt es eine Möglichkeit, diese Konfiguration zu würdigen? Wenn nicht, ist das auf einer ToDo-Liste zu implementieren? Vielleicht sogar eine Alternative im Speicheranbieter?

Ich würde gerne in der Lage sein, die Testschritte zu verwenden, um den Kontext auszutauschen und eine echte Datenbank in einigen Integrationstestszenarien zu verwenden, die den gleichen Code nutzen könnten. Dies scheint ein "nice to have" zu sein, und vielleicht ist das ein Fall für Bemühungen mit EF Core. Ich konnte jedoch nichts über Bemühungen finden, an EF Core gearbeitet zu werden.

Ich konnte nichts auf der Uservoice-Seite für EF finden ( https://data.uservoice.com/forums/72025-entity-framework-feature-suggestions ) und werde als nächstes dorthin gehen, wenn es gerade nicht verfügbar ist.

Beliebte Antwort

Diese Frage wurde schon eine ganze Weile gestellt, aber ich hatte dieselbe Frage und stolperte über diese unbeantwortete Frage. Ich fand eine Antwort, die für mich funktioniert, also dachte ich, ich würde teilen, für den Fall, dass jemand anders darüber stolperte wie ich.

Es scheint, dass SQLite eine Option im Speicher hat, die eher wie eine echte Datenbank funktioniert als die Standardoption UseInMemory (): https://docs.microsoft.com/en-us/ef/core/miscellaneous/testing/sqlite

Einziger Unterschied war, dass ich Microsoft.EntityFrameworkCore.Sqlite , nicht Microsoft.Data.Sqlite wie die Dokumente sagen.

Nicht ganz relevant für die Frage, aber in meinem speziellen Fall möchte ich ein in Erinnerung verwenden, während ich die grundlegende Funktionalität eines Webapi teste, an dem ich arbeite, aber ich möchte immer noch in der Lage sein, einzigartige Einschränkungen usw. zu testen ist was ich hinzugefügt habe, um die In-Memory-Datenbank zu implementieren.

Innerhalb der Dienste konfigurieren:

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

Innerhalb der Konfiguration:

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




Lizenziert unter: CC-BY-SA
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum