1

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

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

我的问题是:

  1. 请建议尽量减少实体/复杂的类型,可以使用EF实施的数量和未做更改数据库对象的解决方案。

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

  3. 我们怎样才能返回匿名类型的存储过程的输出?这也是配不上我,因为在大多数情况下,我将数据返回给客户端JSON格式

感谢

回答

2

您将无法返回匿名类型 - 那些通常被限制到他们在里面定义的方法的范围。

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

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

您将无法避免大量复杂类型的只是从存储过程获取返回值的缘故 - 但你会请将这些锁定在数据库层中,它们不会“泄漏”到整个应用程序中。

+0

我一直在做这个地方的数据大小小。但是,在SP返回大数据集的情况下,使用映射框架创建View模型或Domain对象的成本很高。感谢您确认匿名类型无法退回。 – ideafountain 2012-08-03 19:10:50

0

只需使用System.Data.DataTable一样的好日子。

+1

这应该是在评论 – 2016-06-22 08:30:04