【发布时间】:2011-04-04 11:45:17
【问题描述】:
升级到DNN 5.5.0 后,我们必须在所有业务对象上实施IHydratable。
这个想法一开始似乎是个不错的方法,但在玩过IHydratable 之后,我就不太确定了。
有两种可能:
- 我做错了
-
IHydratable强制您使用select *构建所有查询
商业案例:
- 我的第一个存储过程返回
BgId和BgShortDesc - 我的第二个存储过程返回
BgId和BgReportedUser
我的IHydratable 实现如下所示:
public class Bug : IHydratable
{
public int BgId { get; set; }
public string BgShortDesc { get; set; }
public int BgReportedUser { get; set; }
public DateTime BgReportedDate { get; set; }
public Bug() { }
public int KeyID
{
get { return BgId; }
set { BgId = value; }
}
public void Fill(IDataReader dr)
{
BgId = Convert.ToInt32(Null.SetNull(dr["BgId"], BgId));
BgShortDesc = Convert.ToString(Null.SetNull(dr["BgShortDesc"], BgShortDesc));
BgReportedUser = Convert.ToInt32(Null.SetNull(dr["BgReportedUser"], BgReportedUser));
BgReportedDate = Convert.ToDateTime(Null.SetNull(dr["BgReportedDate"], BgReportedDate));
}
}
fill 方法将在上述任何存储过程中抛出IndexOutOfRangeException,因为并非所有字段都以IDataReader 返回。
解决此问题的简单方法是在所有存储过程中使用select *,但这不是一个好习惯。
在这种情况下实现IHydratable 的正确方法是什么?
P.S.请记住,我的示例过于简单化了,无法理解。
【问题讨论】:
标签: interface dotnetnuke dotnetnuke-5