使用dbnull对Linq 2 sql进行单元测试

时间:2009-12-16 04:02:21

标签: linq-to-sql

我正在为一个从数据表中填充对象的方法编写单元测试。在一个特定的单元测试中,我想检查如果数据行中有一个空值,对象将如何填充。如果我将DBNull.value分配给数据行,则在运行测试时会出现异常。

我已在下面发布了测试对象 -

return dt.AsEnumerable().Select(
   row => new ChannelManager{ ChannelId = row.Field<int>("EventId") })
   .ToList();

测试是 -

DataSet ds = new DataSet();
DataTable dt1 = new DataTable();
dt1.Columns.Add("EventId", typeof(int));
DataRow dr1 = dt1.NewRow();
dr1["EventId"] = DBNull.value;
dt1.Rows.Add(dr1);
ds.Tables.Add(dt1);
if(!test.ChannelId.HasValue)
           Assert.True(true);

但我得到一个例外,说不能将DBNull.Value强制转换为'System.Int'

1 个答案:

答案 0 :(得分:0)

当您读取该值时,请使用可为空的int:

ChannelId = row.Field<int?>("EventId")
如果您请求的数据类型可以为空,

DBNull将自动转换为null