Сначала тестирование представления с использованием базы данных InMemory и основного кода EntityFramework - PullRequest
0 голосов
/ 15 января 2019

У меня есть EF core code первое веб-приложение API.

Существует сущность Products и дочерняя сущность UserProductsRating (с отношением один ко многим)

Я также хотел получить среднюю оценку за обзор (и иметь возможность выбирать / сортировать по нему), поэтому создал представление для этого (используя метод, описанный в этом ответе). [https://stackoverflow.com/a/18707413][1])

Итак, миграция для моего вида выглядит так:

   protected override void Up(MigrationBuilder migrationBuilder)
            {
                string script =
                @"
                CREATE VIEW AverageProductRating AS 
                SELECT u.ProductId, AVG(CAST(u.Rating AS FLOAT)) as AverageRating 
FROM dbo.UserRatings u GROUP BY u.ProductId";

                migrationBuilder.Sql(script);
            }

            protected override void Down(MigrationBuilder migrationBuilder)
            {
                string script = @"DROP VIEW dbo.AverageProductRating";

                migrationBuilder.Sql(script);
            }

Тогда сверху находится сущность AverageRating.

Это все отлично работает и позволяет мне создавать запросы вроде:

 var top5Products = _db.Products.Include(x => x.AverageProductRating)
        .Where(x => x.AverageProductRating != null)
        .OrderByDescending(x => x.AverageProductRating.AverageRating)
        .Take(5); 

Проблема возникает, когда я попадаю на тесты модулей / интеграций. Я использую InMemoryDatabase с EnsureCreated для настройки данных экземпляра / начального уровня тестирования.

var options = new DbContextOptionsBuilder<ProductsContext>()
                .UseInMemoryDatabase(Guid.NewGuid().ToString())
                .EnableSensitiveDataLogging()
                .Options;
            var context = new ProductsContext(options);

context.Database.EnsureCreated();

Когда я запускаю тесты против этого, у Entity AverageProductRating всегда есть ноль строк (я не уверен, создается ли представление вообще или нет)

Я думаю, что это может быть связано с ограничениями в SQL в db памяти или с тем, как выполняются миграции, но я не уверен.

Любые предложения о том, как обойти это, будут приветствоваться

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...