【问题标题】:Dotnet EF Core 2.1 throws QueryClientEvaluationWarning when querying decimal propertyDotnet EF Core 2.1 在查询小数属性时抛出 QueryClientEvaluationWarning
【发布时间】: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# 属性。

标签: c# linq .net-core ef-core-2.1


【解决方案1】:

我不确定这是否会对您有所帮助,但如果您首先使用 EF 代码,则可以在配置类中指定比例和精度。例如:

modelBuilder.Property(x => x.PurchaseCost).HasColumnType("decimal(12,6)");

类的我的 PurchaseCost 属性定义为十进制类型。

【讨论】:

  • 我已经通过在属性声明中使用 ColumnAttribute 将列类型定义为十进制 (18,4) 但无论如何感谢
【解决方案2】:

在针对 SQL Server 运行时,似乎这实际上不是问题。问题出在我使用 SQLite 的集成测试中

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-29
    • 2019-02-03
    • 1970-01-01
    • 2020-09-28
    • 2019-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多