"AutoLot": "server=.,5433;Database=AutoLotFinal;
User Id=sa;Password=P@ssw0rd;"
}
}
Модифицируйте файл проекта, чтобы файл appsettings.json
AutoLot.Dal.Tests.csproj такой элемент ItemGroup:
Создание класса TestHelpers
Класс TestHelpers
ApplicationDbContext. Создайте в корневом каталоге проекта новый файл открытого статического класса по имени TestHelpers.cs. Приведите операторы using к следующему виду:using System.IO;
using AutoLot.Dal.EfStructures;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Storage;
using Microsoft.Extensions.Configuration;
namespace AutoLot.Dal.Tests
{
public static class TestHelpers
{
}
}
Определите два открытых статических метода, предназначенные для создания экземпляров реализации IConfiguration
ApplicationDbContext. Добавьте в класс показанный ниже код:public static IConfiguration GetConfiguration =>
new ConfigurationBuilder
.SetBasePath(Directory.GetCurrentDirectory)
.AddJsonFile("appsettings.json", true, true)
.Build;
public static ApplicationDbContext GetContext(IConfiguration configuration)
{
var optionsBuilder = new DbContextOptionsBuilder
var connectionString = configuration.GetConnectionString("AutoLot");
optionsBuilder.UseSqlServer(connectionString,
sqlOptions => sqlOptions.EnableRetryOn
Failure); return new ApplicationDbContext(optionsBuilder.Options);
}
Как вероятно вы помните, выделенный полужирным вызов EnableRetryOnFailure
Добавьте еще один статический метод, который будет создавать новый экземпляр ApplicationDbContext
ApplicationDbContext из существующего экземпляра с целью совместного использования подключения и транзакции:public static ApplicationDbContext GetSecondContext(
ApplicationDbContext oldContext,
IDbContextTransaction trans)
{
var optionsBuilder = new DbContextOptionsBuilder
optionsBuilder.UseSqlServer(
oldContext.Database.GetDbConnection,
sqlServerOptions => sqlServerOptions.EnableRetryOnFailure);
var context = new ApplicationDbContext(optionsBuilder.Options);
context.Database.UseTransaction(trans.GetDbTransaction);
return context;
}
Добавление класса BaseTest
Создайте в проекте новый каталог по имени Base
BaseTest.cs. Модифицируйте операторы using следующим образом:using System;
using System.Data;
using AutoLot.Dal.EfStructures;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Storage;
using Microsoft.Extensions.Configuration;
Сделайте класс абстрактным и реализующим IDisposable
readonly для хранения экземпляров реализации IConfiguration икласса ApplicationDbContext и освободите экземпляр ApplicationDbContext в виртуальном методе Dispose:namespace AutoLot.Dal.Tests.Base
{
public abstract class BaseTest : IDisposable
{
Бьёрн Страуструп , Ирина Сергеевна Козлова , Бьерн Страуструп , Валерий Федорович Альмухаметов
Программирование, программы, базы данных / Базы данных / Программирование / Учебная и научная литература / Образование и наука / Книги по IT