【发布时间】:2010-12-13 01:13:02
【问题描述】:
我正在努力将良好的数据库设计概念与良好的面向对象设计联系起来。
传统上,如果我想在转发器中显示新闻报道列表,我会使用类似:
<script runat="server">
void ShowNews()
{
rptNewsStories.DataSource = News.GetAllNews(); // Returns a DataTable
rptNewsStories.DataBind();
}
</script>
<asp:Repeater id="rptNewsStories" runat="server">
<ItemTemplate>
<div>
<span class="Title"><%# Eval("Title")"%> (<%# Eval("Location")"%>)</span>
<p>
<%# Eval("Summary")"%>
</p>
<ul>
<li>Added by: <%# Eval("AddedByFullName")%></li>
<li>Added on: <%# Eval("AddedOn")%></li>
</ul>
</div>
</ItemTemplate>
</asp:Repeater>
这里 News.GetAllNews() 返回一个 DataTable,它只是存储过程返回的内容的转储。存储过程被编写为使用连接返回数据,因此它的数据价值不止一张表。
这样做的好处在于,在数据库中存储过程可以从 News 表中存在的 AddedByID 中查找谁添加了新闻故事并返回人员作为返回的 AddedByFullName 值的全名。
但是,如果我尝试放弃使用 DataTable 并返回 News 对象列表,我会得到以下信息:
<script runat="server">
void ShowNews()
{
rptNewsStories.DataSource = News.GetAllNews(); // Returns a List<News>
rptNewsStories.DataBind();
}
</script>
<asp:Repeater id="rptNewsStories" runat="server">
<ItemTemplate>
<div>
<span class="Title"><%# Eval("Title")"%> (<%# Eval("Location")"%>)</span>
<p>
<%# Eval("Summary")"%>
</p>
<ul>
<li>Added by: <!-- Here there is only a AddedByUserID, not an AddedByFullName value --></li>
<li>Added on: <%# Eval("AddedOn")%></li>
</ul>
</div>
</ItemTemplate>
</asp:Repeater>
但现在我遇到的问题是我想要显示的某些值(例如 AddedByFullName)在 News 对象中不存在,因为它们不是明确设置的,但不是从对象中的查找 ID 中检索。
我想返回对象而不是 DataTables,但我不知道弥合这一差距的最佳方法。
我:
* 在 News 类中为每个可以从数据库返回的与此数据相关的附加值创建附加属性?
* 对于有很多附加值的特定情况,请坚持使用 DataTables?
还是我完全走错了路!
【问题讨论】:
标签: c# sql-server generics oop datatable