Wie kann ich eine Schnittstelle für meinen DbContext erstellen, wenn ich EfCore.BulkExtensions verwende?C#

Ein Treffpunkt für C#-Programmierer
Guest
 Wie kann ich eine Schnittstelle für meinen DbContext erstellen, wenn ich EfCore.BulkExtensions verwende?

Post by Guest »

Ich arbeite an einer ASP.Net Core 2.0-API, die Entity Framework Core 2.0 verwendet. Ich versuche, Unit-Tests mit XUnit und Moq aufzubauen, habe jedoch ein Problem beim Erstellen einer Schnittstelle für meinen DbContext, damit ich ihn in meinen Unit-Tests nachahmen kann.

Derzeit verwendet mein Projekt keine Schnittstelle für meinen Kontext. Ich füge es als Implementierung in meine Repository-Klassen ein. Und in meinem Startup.cs verwende ich Services.AddDbContext, um es einzurichten.

Beispiel für einen typischen Repository-Klassenkonstruktor.

Code: Select all

    public CompaniesRepository(MyDbContext myDbContext)
{
_myDbContext = myDbContext;
}
Beispiel für Startup.cs

Code: Select all

        services.AddDbContext(options =>
{
options.UseSqlServer(Configuration.GetConnectionString("MyDbConnectionString"),
sqlOptions =>
{
sqlOptions.EnableRetryOnFailure(5,TimeSpan.FromSeconds(30),sqlTransientErrors);
});
});
Und diese Methode hat auf diese Weise einwandfrei funktioniert.

Jetzt versuche ich jedoch, sie einzurichten Unit-Tests und ich möchte in der Lage sein, meinen Kontext zu verspotten, also muss ich eine Schnittstelle dafür erstellen.

Also habe ich eine Schnittstelle zu MyDbContext namens IMyDbContext hinzugefügt und den folgenden Code zu meiner Startup.cs hinzugefügt, wobei ich den Empfehlungen gefolgt bin in diesem Blogbeitrag von Jerrie Pelser

Code: Select all

        services.AddScoped(provider => provider.GetService());
Was bis auf ein Problem zu funktionieren schien. Ich verwende auch Boris Djurdjevics EFCore.BulkExtensions NuGet und erhalte daher von meinen Repository-Klassen einen Kompilierungsfehler, der jetzt die IMyDbContext-Schnittstelle in ihre Konstruktoren einfügt und besagt, dass meine Schnittstelle nicht enthält Eine Definition für BulkInsert:


Fehler CS1929 „IMyDbContext“ nicht enthält eine Definition für „BulkInsert“ und die beste Erweiterungsmethodenüberladung „DbContextBulkExtensions.BulkInsert(DbContext, IList, BulkConfig, Action)“ erfordert einen Empfänger vom Typ „DbContext“


Ich gehe davon aus, dass ich die BulkInsert-Erweiterungsmethode irgendwie zu meiner IMyDyBontext-Schnittstelle hinzufügen muss, bin mir aber nicht sicher, wie das geht mach das richtig. Wenn ich einfach versuche, die Methode zu meiner Schnittstelle hinzuzufügen, erhalte ich eine Fehlermeldung, die besagt, dass sie natürlich nicht in meiner MyDbContext-Klasse implementiert ist.

Wie verweise ich auf die BulkInsert-Erweiterungsmethode in meiner MyDbContext-Klasse?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post