c# – 从.net中的数据库返回数据:返回DataTable还是LIst?
我正在努力将良好的数据库设计概念与良好的面向对象设计联系起来.
传统上,如果我想在转发器中显示新闻故事列表,我会使用以下内容: <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,它只是存储过程返回的转储.写入存储过程是为了使用连接返回数据,因此它不止一个表的数据. 这样做的好处在于,在数据库中,存储过程可以查找谁从新闻表中存在的AddedByID添加新闻故事,并返回人员全名作为返回的AddedByFullName值. 但是,如果我尝试删除DataTable的使用而返回一个News对象的List,我会得到以下结果: <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,但我不知道弥合这个差距的最佳方法. 我是: 或者我完全走错了轨道! 解决方法
您的选择受到您愿意用作数据访问的基础技术的限制.目前,VS工具集和.Net框架支持多种替代方案:
>经典ADO.Net 2.0.在代码中设计Typed datasets和 除此之外,所有ADO.Net类型的数据集都允许您指定导航关系,就像您要求的那样,急切地或懒惰地加载.在你描述这些技术的自然兴趣的情况下,将在设计者中明确地模拟新闻文章和作者之间的关系,并让框架处理加载适当数据和适当类型的问题,最终意义连接问题由应用程序数据访问层(框架)隐式处理,而不是由显式创建的存储过程处理. 技术的选择将在您的代码中无处不在,从您获取数据的方式到显示方式以及更新方式,这些技术都不容易互换.就个人而言,我发现权力和复杂性的正确平衡是LINQ to SQL. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |