Как я могу создать интерфейс для моего DbContext, если я использую EfCore.BulkExtensionsC#

Место общения программистов C#
Ответить
Anonymous
 Как я могу создать интерфейс для моего DbContext, если я использую EfCore.BulkExtensions

Сообщение Anonymous »

Я работаю над API ASP.Net Core 2.0, который использует Entity Framework Core 2.0. Я пытаюсь создать модульные тесты с помощью XUnit и Moq, но у меня возникла проблема с созданием интерфейса для моего DbContext, поэтому я могу издеваться над ним в своих модульных тестах.

В настоящее время мой проект не использует интерфейс для моего контекста. Я внедряю его в классы своего репозитория как его реализацию. А в моем Startup.cs я использую Services.AddDbContext для его настройки.

Пример типичного конструктора класса репозитория.

Код: Выделить всё

    public CompaniesRepository(MyDbContext myDbContext)
{
_myDbContext = myDbContext;
}
Пример Startup.cs

Код: Выделить всё

        services.AddDbContext(options =>
{
options.UseSqlServer(Configuration.GetConnectionString("MyDbConnectionString"),
sqlOptions =>
{
sqlOptions.EnableRetryOnFailure(5,TimeSpan.FromSeconds(30),sqlTransientErrors);
});
});
И этот метод работает отлично.

Однако сейчас я пытаюсь настроить модульные тесты, и я хочу иметь возможность имитировать мой контекст, поэтому мне нужно создать для него интерфейс.

Итак, я добавил интерфейс в MyDbContext под названием IMyDbContext и добавил следующий код в свой Startup.cs, следуя рекомендациям в этом сообщении блога Джерри Пелсера

Код: Выделить всё

        services.AddScoped(provider => provider.GetService());
Кажется, это сработало, за исключением одной проблемы. Я также использую EFCore.BulkExtensions NuGet Бориса Джурджевича, и поэтому я получаю ошибку компиляции, исходящую от моих классов репозитория, которые теперь внедряют интерфейс IMyDbContext в свои конструкторы, заявляя, что мой интерфейс не содержит определение BulkInsert:


Ошибка CS1929 «IMyDbContext» не содержит определения BulkInsert, а для лучшей перегрузки метода расширения "DbContextBulkExtensions.BulkInsert(DbContext, IList, BulkConfig, Action)" требуется получатель типа "DbContext"

Я предполагаю, что мне нужно добавить метод расширения BulkInsert в мой интерфейс IMyDyBontext как-то, но я не уверен, как это сделать правильно. Если я просто попытаюсь добавить этот метод в свой интерфейс, то, конечно же, получу сообщение об ошибке, сообщающее, что он не реализован в моем классе MyDbContext.

Как мне ссылаться на метод расширения BulkInsert в моем классе MyDbContext?

Подробнее здесь: https://stackoverflow.com/questions/503 ... extensions
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»