从实体框架返回自定义对象 并分配给对象数据源

2023-11-22

我需要一些有关问题的指导,我正在使用 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期望定义类或实体?如何根据存储过程结果创建一个对象并将其分配给它?


如果您已经有一个与您的 proc 返回类型匹配的实体类型,请将其用作类型参数。

public List<MyEntity> GetData<MyEntity>(int product_id) where T : class 
{

    List<MyEntity> myList = new List<MyEntity>(); 

    var groupData = context.ExecuteStoreQuery<MyEntity>("exec 
    spGetProductsByGroup @ProductID={0}", product_id);

    return myList;
}

否则你可以使用ADO.NET 数据读取器手动构建列表。

using (SqlConnection connection = new SqlConnection("your connection string"))
{
    SqlCommand command = new SqlCommand(
      "exec spGetProductsByGroup @ProductID",
      connection);
    command.Parameters.Add(product_id);

    connection.Open();

    SqlDataReader reader = command.ExecuteReader();

    List<ProcType> list = new List<ProcType>();
    if (reader.HasRows)
    {
        while (reader.Read())
        {
            list.Add(new ProcType(){Property1 = reader.GetInt32(0), Property1 = reader.GetString(1));
        }
    }
    reader.Close();

    return list;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从实体框架返回自定义对象 并分配给对象数据源 的相关文章

随机推荐

  • Firebase 3.0 令牌:[错误:Firebase Auth ID 令牌没有“kid”声明]

    我目前正在使用 firebase 3 0 开发一个 node js 服务 该服务由使用 firebase 2 4 的 Web 应用程序调用 我正在发送当前用户Firebase ID 令牌 Auth getAuth token 在我的标头调用
  • ng14 中具有强类型表单的 FormBuilder

    我有以下表格 const enum Fields FirstName firstName LastName lastName interface FormType Fields FirstName FormControl
  • 检索安全描述符并获取 FileSystemRights 编号

    Using Get Acl我正在尝试获取文件夹的访问权限 问题是 对于某些组 我得到的是号码而不是访问类型 下面的例子 get acl C TestFolder access FileSystemRights 536805376 Acces
  • Laravel 5.6 getRouteKeyName() 不起作用

    这是我到目前为止的代码 Web php Route get uri PageController show gt name page show 页面控制器 Show the requested page public function sh
  • 将 .jar 转换为 OSX 可执行文件?

    我制作了一个 Java 应用程序 我想在 Windows OSX 和 Linux 上分发它 而不分发 jar 文件 我使用了很棒的 Windows exe 包装器http launch4j sourceforge net 创建一个包含我的图
  • Android ListView 具有多种布局

    我必须显示具有不同类型视图的列表 所以我必须定义一个带有适配器的 ListView 我必须在其中扩展多个视图 我已经经历过example给定 但问题是我的列表不对称 就像示例中每次在 4 个项目后重复标题一样 所以我面临着重复使用物品的问题
  • 如何在跨文件预处理时获取唯一值

    PROBLEM 我需要一种使用预处理器指令生成唯一值的方法 目的是每次调用宏时 它都会有一个唯一的integral标识符 但它应该在文件中保留其价值 有点像预处理器计数器 用于记录调用函数的次数 更多信息 我使用的宏是 define LOG
  • 使用通用可选参数的 Typescript 函数重载

    我正在尝试编写一个高阶函数来包装输入函数并缓存最近调用的结果作为副作用 基本功能 withCache 看起来像这样 function cache key string value any Some caching logic goes he
  • 为什么我无法使用索引器将项目添加到通用列表?

    这是我今天看到的一个奇怪的情况 我有一个通用列表 我想使用它的索引器将项目添加到我的列表中 如下所示 List
  • Docker PHP 7.1 imagick

    Docker php 7 1 imagick pecl install imagick docker php ext enable imagick 软件包 pecl php net imagick 没有可用的版本 安装失败 错误 服务 应用
  • 通过 .NET 确定每个查询的 DocumentDB 请求费用

    我试图弄清楚在通过提供的 NET 客户端库执行 DocumentDB 查询请求时是否可以获得 请求费用 详细信息返回到底层 HTTP 标头 x ms request charge 中 我可以通过 Fiddler 等进行监控 但如果我可以直接
  • Python:pip 尝试安装到 /bin 目录

    我安装了 pythonbrew install python which pip usr local bin pip my PYTHONPATH shows usr local lib python2 7 site packages 但是
  • Symfony2 自定义存储库类

    我是 symfony2 的新手 我正在尝试创建自定义存储库类 但无法做到 这是我正在做的事情 我向实体类 手机 添加了注释 ORM Entity repositoryClass Maak DefaultBundle Entity Mobil
  • iOS16 Bug 键盘在关闭 SwiftUI 时破坏布局

    在 iOS16 中 工作表内部存在键盘的错误 当工作表关闭时键盘消失 没关系 但布局未更新 我只看到了关于同一问题的 1 个问题 想知道也许有人找到了临时解决方法 直到苹果不解决这个问题 重现代码 struct Test View Stat
  • 如何检查域名是否存在?

    不仅是 com 或 net 等简单的域名 还有 co uk fr gov rw 我真的应该做一个巨大的映射 tld 到相关的 whois 服务器 还是有更简单的方法 http php net manual en function check
  • 尝试查看项目属性时 Visual Studio 2008 中出现“未指定错误”

    当我将活动解决方案从 Win32 设置为 x64 时 我无法构建项目或查看属性 当我尝试构建我的项目时 它被跳过 当我尝试查看属性时 第一次尝试时没有任何反应 第二次 我收到一条错误消息 操作无法完成 未指定的错误 我正在运行 Visual
  • Int16 - .net 中的字节容量?

    为什么 short a 0 Console Write Marshal SizeOf a shows 2 但如果我看到 IL 代码 我会看到 1 IL 0000 ldc i4 0 2 IL 0001 stloc 0 3 IL 0002 ld
  • strftime 或仅 PHP 是否弃用了“美国/东部”、“美国/中部”和“美国/太平洋”?

    我有一个 shell 脚本 准确地说是 zsh 它使用 strftime I M p Z a b d EPOCHSECONDS 生成 当前时间 例如 中部标准时间 02 45 PM 3 月 1 日星期四 这需要能够显示几个不同的美国时区的时
  • 如何在 gdb 启动时加载 .gdbinit?

    这是一个看似微不足道的问题 但我找不到一个简单的方法来完成这个任务 我有我的 gdbinit文件定义在与 gdb exe 所在目录相同的目录中 即在我的编译器的 bin 目录中 但是 当我运行 gdb 时 我得到以下信息 GNU gdb G
  • 从实体框架返回自定义对象 并分配给对象数据源

    我需要一些有关问题的指导 我正在使用 Entity Framework 4 0 我有 DAL 和 BLL 并且绑定到页面上的 ObjectDataSource 我必须使用编写一个存储过程PIVOT和动态 SQL 以我想要的方式从多个实体返回