首先,我将解释为什么可以通过测试,但使用案例抛出相关异常。
请阅读 Microsoft Learning EF Core 内存中数据库提供程序,其中提到了以下内容:
内存中提供程序不是为在测试环境之外使用而设计的,因此不应将其用作测试环境。
因此,您可能无法在实际情况下使用它。
现在我将解释为什么会抛出这两个异常。
例外:
客户端投影包含通过实例方法“GetTaxType”对“Barcelo.Integrator.Booking.Repository.HotelRepository”常量表达式的引用。
这可能会导致内存泄漏;请考虑将该方法设为静态,以便它不会在实例中捕获常量。
根据我的测试,我重现了这个问题。根据我的研究,可能的原因可能是,如果您在 IQueryable 中包含实例方法,它将被缓存,并且即使在处理上下文后也不会释放该方法。如果你想了解更多关于它的信息,你可以参考这个答案。
方法“System.Extensions.ToDate”的翻译失败。
以可转换的形式重写查询,或者通过插入对“AsEnumerable”、“AsAsyncEnumerable”、“ToList”或“ToListAsync”的调用来显式切换到客户端评估。
EF Core 不知道如何将 ToDate 方法转换为 SQL 命令。在这里,您可以尝试以下代码来替换 ToDate 方法:
.Where(c => c.CodHotel == hotelCode
&& DateTime.ParseExact(c.FechaHasta, Common.Constants.FORMATDATETIME_YYYYMMDD, System.Globalization.CultureInfo.InvariantCulture) >= DateTime.ParseExact(checkOut, Common.Constants.FORMATDATETIME_YYYYMMDD, System.Globalization.CultureInfo.InvariantCulture))
.Select(s => new Cancelation()
{
Release = Release
})
如果答案是正确的,请点击“接受答案”并点赞。 如果您对此答案还有其他疑问,请点击“评论”。
注意:如果您想接收相关电子邮件,请按照我们的文档中的步骤启用电子邮件通知 此线程的通知。