Estoy luchando por unir los conceptos de un buen diseño de base de datos con un buen diseño orientado a objetos.Devolución de datos de la base de datos en .net: ¿Devuelve una tabla de datos o LIst <T>?
Tradicionalmente si quería ver una lista de las noticias en un repetidor, me gustaría utilizar algo como:
<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>
Aquí News.GetAllNews() devuelve unDataTable, que es sólo una volcado de lo que devuelve el procedimiento almacenado. El procedimiento almacenado se escribe para devolver datos mediante el uso de combinaciones, por lo que hay más de una tabla de datos valiosos.
La ventaja de esto en que, en la base de datos del procedimiento almacenado puede averiguar quien añadió la noticia de la AddedByID que existe en las noticias mesa y devolver las personas nombre completo como el valor AddedByFullName devuelto .
Sin embargo si intento y soltar el uso de un DataTable y en lugar de devolver una lista de los objetos de noticias, me sale el siguiente:
<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>
Pero ahora me quedo con el problema de que ciertos valores que Quiero mostrar (Como AddedByFullName) no existen dentro del objeto Noticias, porque no son algo que está explícitamente establecido, sino que se recuperan de un ID de búsqueda en el objeto.
Me gustaría devolver objetos en lugar de DataTables, pero no sé la mejor manera de cerrar esta brecha.
Do I:
* Crear propiedades adicionales en las Noticias clase para cada valor adicional que se puede devolver a la base de datos en relación con estos datos?
* ¿Quédate con DataTables para casos específicos donde hay muchos valores adicionales?
¿O simplemente estoy en el camino equivocado?
Gracias por su entrada Remus - Escuché que MS estaba deteniendo el desarrollo de LINQ to SQL a favor de Entity Framework. ¿Es esto cierto y, en caso afirmativo, alentarías los nuevos desarrollos con esta tecnología? –
@Peter: ya no estoy con EM así que realmente no sabría más de lo que es conocimiento público. Es cierto que EF es la forma recomendada en el futuro, pero dada la abrumadora adopción de LINQ to SQL en comparación con EF, me sorprendería verlo completamente abandonado. –
Actualmente estoy usando y disfrutando LINQ2SQL para un proyecto .net 3.5. Mi próximo gran proyecto usará .net 4.0, así que usaré Entity Framework 4.0 –