针对Sprocs的代码生成?

时间:2011-12-15 19:47:41

标签: c#-4.0 orm dto

我正在尝试理解代码生成工具/ ORM工具的选择,并发现哪种解决方案最能满足我的要求和存在的限制。

我正在创建一个用于新项目的基础解决方案。它由ASP.NET MVC 3.0,业务逻辑层和数据访问层组成。数据访问层现在需要针对Oracle,然后在db迁移完成后切换到SQL。

从DTO立场映射到解决方案中的自定义类型,ORM /代码生成工具将用于创建我需要的代码,但只能访问Oracle和SQL中的存储过程。

意思是,我需要生成自定义对象,这些自定义对象是作为参数的存储过程并被推送到存储过程,我不需要自己生成sprocs,它们已经存在。我正在寻找sproc需要的表示,并将其生成回到DTO中。在某些情况下,我可以反对意见并生成DTO。我假设大多数工具已经这样做了。但是在90%的情况下,我无法直接访问任何表或视图,只能访问存储过程。

这有意义吗?

1 个答案:

答案 0 :(得分:0)

ORM最适合将对象映射到表(和/或视图),而不是将对象映射到sprocs。

很少有工具可以针对sproc可能生成的任何输出执行自动代码生成,具体取决于sproc的复杂性。代码生成输入到sproc的更直接,因为它通常定义明确且清晰。

我想说如果你遇到了垃圾邮件,那么使用第三方代码来减少开发和维护时间的选择将受到严重限制。

我相信LinqToSql或EntityFramework(或两者兼而有之?)能够在SQL Server方面有一些神奇的功能,试图主要自动找出sproc可能返回的内容。我不认为它一直有效,它只是复杂的猜测工作,我严重怀疑它是否适用于Oracle。我甚至没有发现任何软件方面的东西,甚至试图弄清楚sproc可能会返回什么。

sproc可以返回多个不同的记录集,这些记录集可以由sproc动态构建,具体取决于数据库中的输入和数据。自动预测sproc输出的技术解决方案似乎需要以下内容:

  1. 数据库中的一组静态基础数据
  2. 将所有可能的输入传递给sproc并执行sproc而不会产生任何负面影响或副作用的能力
  3. 这将为您提供任何给定有效输入的静态可能输出集。数据库中的数据发生微小变化可能会使一切无效。

    如果我没记错的话,微软所做的就像调用sproc为所有输入参数传递NULL并假设输出始终是从数据库返回的第一个记录集。这显然是问题的一个不完整的解决方案,但在简单的情况下,它似乎很神奇,因为它可以在某些时候很好地工作。