Return Custom Object <List T> from Entity framework and asignar to Object Data Source
Necesito orientación sobre un problema, estoy usando Entity Framework 4.0, tengo un DAL y BLL y estoy vinculado a ObjectDataSource en la página.
Tuve que escribir un procedimiento almacenado usandoPIVOT
y SQL dinámico para devolver los datos de varias entidades de la manera que quiero. Ahora estoy tratando de descubrir cómo puedo hacer que Entity Framework devuelva un objeto personalizado que puedo vincular a miObjectDataSource
en la página, NECESITO usar un objeto personalizado o un objeto dinámico, ya que el procedimiento almacenado puede devolver cualquier número de columnas, por lo que no puedo usar una clase o entidad fuertemente tipada y también necesito poder vincular esto con un @ObjectDataSource
.
¿Alguien puede señalar una buena manera de hacer esto y cómo definir mi función? Con algunos ejemplos de código, por favor.
Leí que debería intentar usarList<T>
para devolver un objeto ya que EF no admite la devolución de tablas de datos / conjuntos de datos, tengo lo siguiente hasta ahora, pero sé que esto no es correcto.
No he trabajado mucho con los genéricos, si pudiera señalar cómo hacerlo, estoy seguro de que esto sería útil para mucha gente. Proporcione ejemplos de código para la función y cómo vincularObjectDataSource
al objeto devuelto?
¡¡Tu ayuda es muy apreciada!
Gracias por tu ayuda Richard, así es como se ve mi función en este momento en función de tu sugerencia para usar DbDataRecord
unción @ C # paraObjectDataSource
en DAL
public List<DbDataRecord> GetData(int product_id)
{
List<DbDataRecord> availableProducts = new List<DbDataRecord>();
var groupData = context.ExecuteStoreQuery<DbDataRecord>("exec
spGetProducts @ProductID={0}", product_id);
availableProducts = groupData.ToList<DbDataRecord>();
return availableProducts;
}
ObjectDataSource
en la página ASPX
<asp:ObjectDataSource ID="ODSProductAvailability" runat="server"
TypeName="Project.BLL.ProductBL"
SelectMethod="GetData" >
<SelectParameters>
<asp:SessionParameter Name="product_id" SessionField="ProductID" />
</SelectParameters>
</asp:ObjectDataSource>
Ahora estoy recibiendo este error cuando accedo a la página:
El tipo de resultado 'System.Data.Common.DbDataRecord' puede no ser abstracto y debe incluir un constructor predeterminado
Esto es porque elExecuteStoreQuery
espera ser definido clase o entidad? ¿Cómo puedo crear un objeto basado en los resultados del procedimiento almacenado y asignarlo?