从存储过程返回匿名类型

时间:2012-08-02 22:42:21

标签: entity-framework entity-framework-4.1 sql-server-2008-r2

我有一个包含一组存储过程的现有数据库。我正在重新设计应用程序层而不更改数据库对象。我遇到的困难之一是有许多存储过程彼此相似,因为它们查询相同的表但返回不同的列组合。

我既不能返回部分填充的实体,也无法找到使用Entity Framework 4.1(和SQL Server 2008 R2)从存储过程返回匿名类型的方法。这迫使我为每个存储过程定义太多复杂类型,尽管基础表结构是相同的。

我的问题是:

  1. 请建议最小化实体/复杂类型数量的解决方案,这些实体/复杂类型可以使用EF实现,而无需更改数据库对象。

  2. 此外,是否可以返回部分填充的实体?这将使我能够重用实体。我不打算使用对象跟踪功能。

  3. 我们如何从存储过程输出中返回匿名类型?这对我来说也不错,因为在大多数情况下我会以JSON格式将数据返回给客户端

  4. 由于

2 个答案:

答案 0 :(得分:2)

您将无法返回匿名类型 - 这些通常仅限于它们在其中定义的方法的范围。

本身无法返回部分填充类型 - 但您可以这样做:

  • 在您的数据库层中,调用有问题的存储过程;它将返回一个特定的复杂类型以匹配其“签名”
  • 使用类似AutoMapper的内容,您可以轻松地将复杂类型中返回的字段复制到系统的实体中,从而获得“部分填充”的实体
  • 将该实体从您的数据库层返回到要使用的应用程序

为了从存储过程中获取返回值,您将无法避免拥有大量复杂类型 - 但是您将把它们锁定在数据库层中,它们不会“泄漏” “进入你的整个申请。

答案 1 :(得分:0)

只需使用 System.Data.DataTable 就像过去一样。