使用 Dapper 映射 DBNull 时可以抛出异常吗?

问题描述 投票:0回答:1

假设我有一个类模型,我想在其中包含非默认值

public class MyModel()
{
    public int PropertyOne { get; set; }
    public int? PropertyTwo { get; set; }
    public string PropertyThree { get; set; }
}

假设我使用此查询查询 MyModel

SELECT
   NULL as PropertyOne,
   NULL as PropertyTwo,
   NULL as PropertyThree

如果我将其映射到 MyModel 类,我将拥有 PropertyOne = 0、PropertyTwo = null、PropertyThree = null。

默认情况下,Dapper 在读取时遇到 DBNull 值时不会调用任何 setter,因此 PropertyOne 有一个 int 的默认值,即 0。

  1. 我不希望这样,我想验证我是否始终会从查询中获得 PropertyOne 的非空值,并且如果读者遇到 DBNull,我希望得到异常。

  2. 假设我也不希望 PropertyThree 具有空值。当映射发生时,我是否也可以使用 Dapper 以某种方式实现此检查?我可以使用下面模型中的属性来做到这一点吗?

public class MyModel()
{
    public int PropertyOne { get; set; }
    public int? PropertyTwo { get; set; }
    [NotDBNull]
    public string PropertyThree { get; set; }
}

所以理想情况下我想要实现的是使用上述模型并具有以下逻辑:

情况 1:PropertyOne 获取 DBNull,但它不可为空 => 抛出异常

案例 2:PropertyTwo 获得 DBNull,但它可以为空 => 一切都好

案例3:PropertyThree获取DBNull,但被标记为[NotDBNull]属性=>抛出异常

有什么方法可以让我在不使用其他形式的验证的情况下使用 Dapper 实现这一目标?

c# .net dapper
1个回答
0
投票

Dapper.AOT 以您描述的方式工作(我希望!它的意思是),对于值类型和引用类型(如果在源代码中启用了 NRT,则为后者)。所以:尝试 Dapper.AOT 看看效果如何!

© www.soinside.com 2019 - 2024. All rights reserved.