1

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

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

我的问题是:

  1. 请提出解决方案,以尽量减少可以使用 EF 实现且无需更改数据库对象的实体/复杂类型的数量。

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

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

谢谢

4

2 回答 2

2

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

返回部分填充的类型本身是不可能的 - 但你可以这样做:

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

您将无法避免仅仅为了从存储过程中获取返回值而拥有许多复杂类型 - 但您会将这些类型锁定在您的数据库层中,它们不会“泄漏”到您的整个应用程序。

于 2012-08-03T05:00:48.167 回答
0

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

于 2016-06-22T08:23:08.357 回答