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的主要内容,如果未能解决你的问题,请参考以下文章

EF Core 2.1 中的新增功能

dotnet 命令找不到 .NET Core 2.1 的新安装

zsh:找不到命令:dotnet-ef

Blazor WebAssembly+Duende.IdentityServer+EF Core认证授权企业级实战

Blazor WASM+Duende.IdentityServer+EF Core认证授权企业级实战

Blazor WASM+Duende.IdentityServer+EF Core认证授权企业级实战