Dotnet EF Core 2.1 在查询小数属性时抛出 QueryClientEvaluationWarning
Posted
技术标签:
【中文标题】Dotnet EF Core 2.1 在查询小数属性时抛出 QueryClientEvaluationWarning【英文标题】:Dotnet EF Core 2.1 throws QueryClientEvaluationWarning when querying decimal property 【发布时间】:2020-02-12 12:12:35 【问题描述】:我有一个 C# 类 Loan,它映射到 SQL Server 数据库中的 Loans 表。我正在使用 DotNet EF Core 2.1。从我的代码与数据库交互。
public class Loan
public decimal Rate get;set;
// Other properties omitted for brevity
当我创建数据库连接时,我将其配置为在服务器端无法执行查询时引发异常,如下所示:
services.AddDbContext<DbContext>(options =>
options
.UseSqlServer(systemConfiguration.DatabaseConnectionString)
.ConfigureWarnings(warnings => warnings.Throw(RelationalEventId.QueryClientEvaluationWarning)));
问题是使用LINQ查询十进制列时:
// Obtain DbContext from services
var loans = await dbContext.Loans.Where(l => l.Rate > 1.5m).ToListAsync();
由于无法在服务器端执行查询而引发异常。其他数值属性类型(例如 int)也可以正常工作。
【问题讨论】:
数据库表中的列是如何定义的? @MarkWagoner decimal(18,4) not null 似乎适用于相同的 DB 列,但具有双重 C# 属性。 【参考方案1】:我不确定这是否会对您有所帮助,但如果您首先使用 EF 代码,则可以在配置类中指定比例和精度。例如:
modelBuilder.Property(x => x.PurchaseCost).HasColumnType("decimal(12,6)");
类的我的 PurchaseCost 属性定义为十进制类型。
【讨论】:
我已经通过在属性声明中使用 ColumnAttribute 将列类型定义为十进制 (18,4) 但无论如何感谢【参考方案2】:在针对 SQL Server 运行时,似乎这实际上不是问题。问题出在我使用 SQLite 的集成测试中
【讨论】:
以上是关于Dotnet EF Core 2.1 在查询小数属性时抛出 QueryClientEvaluationWarning的主要内容,如果未能解决你的问题,请参考以下文章
dotnet 命令找不到 .NET Core 2.1 的新安装
Blazor WebAssembly+Duende.IdentityServer+EF Core认证授权企业级实战