Dapper自动将数据库NULL映射为C#可空类型(如int?、DateTime?)或引用类型(如string)的null值;若映射到非可空类型(如int)则抛InvalidOperationException异常。

Dapper 会自动将数据库中的 NULL 值映射为 C# 中对应的可空类型(如 int?、DateTime?、string 等),无需额外配置,但需确保实体属性类型与数据库字段语义匹配。
Dapper 按照 .NET 类型系统进行隐式转换:
NULL → C# 可空值类型(int?、bool?、DateTime?)会被设为 null
NULL → C# 非可空值类型(int、DateTime)会抛出 InvalidOperationException(“当转换为类型 'Int32' 时,空值无法转换”)NULL → C# 引用类型(string、object、自定义类)直接映射为 null
为避免运行时异常,实体属性应与数据库字段的 nullability 保持一致:
public int? Age { get; set; })public string Name { get; set; },注意 string 本身可为 null,但业务上可配合校验)[Column("xxx")] 或约定命名即可,Dapper 不依赖 DataAnnotations 处理 null 映射某些情况下需要显式控制 null 行为,例如默认值回退或类型不匹配:
ISNULL / COALESCE 提前转换(推荐,贴近数据层):SELECT Id, ISNULL(Age, 0) AS Age FROM Users
var user = conn.QueryFirstOrDefault<User>("SELECT * FROM Users WHERE Id = @id", new { id });<br>int actualAge = user.Age ?? 18;Query<t></t> 的泛型重载配合自定义映射函数(较少用,适合复杂逻辑)使用匿名类型或 ValueTuple 查询时,Dapper 同样遵守类型推导规则:
var result = conn.QuerySingleOrDefault(...); → age 为 null 时安全(int id, string name, int age) 而数据库返回 NULL,则抛异常new { ... })中属性类型由 Dapper 推断,对 NULL 敏感,建议显式用可空类型或改用具名实体类基本上就这些。只要实体属性类型声明合理,Dapper 的 null 映射是透明且可靠的。
以上就是Dapper如何处理null值 Dapper数据库null映射C# nullable类型的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号