假设我有一个类模型,我想在其中包含非默认值
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。
我不希望这样,我想验证我是否始终会从查询中获得 PropertyOne 的非空值,并且如果读者遇到 DBNull,我希望得到异常。
假设我也不希望 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 实现这一目标?
Dapper.AOT 以您描述的方式工作(我希望!它的意思是),对于值类型和引用类型(如果在源代码中启用了 NRT,则为后者)。所以:尝试 Dapper.AOT 看看效果如何!