我需要一些有关问题的指导,我正在使用 Entity Framework 4.0,我有 DAL 和 BLL,并且绑定到页面上的 ObjectDataSource。
我必须使用编写一个存储过程PIVOT
和动态 SQL 以我想要的方式从多个实体返回数据。现在我试图弄清楚如何让实体框架返回一个可以绑定到我的自定义对象ObjectDataSource
在页面上,我需要使用自定义对象或动态对象,因为存储过程可以返回任意数量的列,因此我不能使用强类型类或实体,并且我还需要能够将其与ObjectDataSource
.
有人可以指出执行此操作的好方法以及如何定义我的函数吗?请提供一些代码示例。
我读到我应该尝试使用List<T>
由于 EF 不支持返回数据表/数据集,因此要返回对象,到目前为止我有以下内容,但我知道这是不正确的。
我很少使用泛型,如果你能指出如何做到这一点,我相信这会对很多人有帮助。请提供该函数的代码示例以及如何绑定ObjectDataSource
返回对象?
非常感谢您的帮助!
感谢您的帮助,理查德,根据您对使用 DbDataRecord 的建议,这就是我的函数现在的样子
C# 函数用于ObjectDataSource
in 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
在 ASPX 页面中
<asp:ObjectDataSource ID="ODSProductAvailability" runat="server"
TypeName="Project.BLL.ProductBL"
SelectMethod="GetData" >
<SelectParameters>
<asp:SessionParameter Name="product_id" SessionField="ProductID" />
</SelectParameters>
</asp:ObjectDataSource>
现在,当我访问该页面时,出现此错误:
结果类型“System.Data.Common.DbDataRecord”可能不是抽象的,并且必须包含默认构造函数
这是因为ExecuteStoreQuery
期望定义类或实体?如何根据存储过程结果创建一个对象并将其分配给它?