我有一个EF核心代码优先的Web 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与sureCreated一起使用来设置测试实例/种子数据。
var options = new DbContextOptionsBuilder<ProductsContext>()
.UseInMemoryDatabase(Guid.NewGuid().ToString())
.EnableSensitiveDataLogging()
.Options;
var context = new ProductsContext(options);
context.Database.EnsureCreated();
当我对此进行测试时,AverageProductRating实体始终具有零行(我不确定是否完全创建了View)
我认为这可能与内存数据库中SQL的限制或迁移的运行方式有关,但我不确定。
欢迎提出任何解决方法的建议
谢谢