【发布时间】:2011-12-06 01:43:12
【问题描述】:
从 ExecuteReader 读取数据时。它在 IDataReader 中向我返回数据。当我想将此数据填充到我的实体中时,我将在大多数情况下将非 Nullable 值分配给 Nullable 类型或 Non Nullable 类型,例如:
int id;
string name;
int? age;
byte[] image;
example e = new example();
e.id = (int)dr["id"]; //unbox
e.name = dr["name"].ToString() //will result in empty string if dr["name"] is DBNull
e.name = dr["name"] is DBNull ? null : dr["name"].ToString();
e.age = dr["age"] as int?; // way 1
e.age = dr["age"] is DBNull ? null : (int?)dr["age"]; //way 2
e.image = dr["image"] as byte?;
编辑
如果 id 是表的主键并且是 NonNullable。但是它正在另一个表中使用,其中该键可能是NULL,那么应该采用什么方法。如果该实体变为 NULL 或应该抛出异常。
【问题讨论】:
-
顺便说一句...根据我所见,这对于dapper-dot-net 来说是完美;
Query<example>(sql, args)将为您完成所有这些工作,经过优化、缓存并且没有拼写错误/大量代码的风险。 -
@MarcGravell:请在您的评论中添加更多信息,如果我没记错的话,此函数将在内部映射到 DAL 中的示例实体。如果是这样,我正在使用相同的做法,只是为了获得更好的方法,这是我认为呈现的最简单的方法。
-
@vaibhav - 现在的生命太短,无法手动从数据库映射到实体。