【问题标题】:Code generation against Sprocs?针对 Sprocs 的代码生成?
【发布时间】:2011-12-15 19:47:40
【问题描述】:

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

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

从 DTO 角度映射到解决方案中的自定义类型,哪种 ORM/代码生成工具可以用来创建我需要的代码,但只能访问 Oracle 和 SQL 中的存储过程?

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

这有意义吗?

【问题讨论】:

    标签: c#-4.0 orm dto


    【解决方案1】:

    ORM 最擅长将对象映射到表(和/或视图),而不是将对象映射到存储过程。

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

    我想说,如果您被存储过程卡住了,那么您使用第三方代码来帮助减少开发和维护时间的选择将受到严重限制。

    我相信 LinqToSql 或 EntityFramework(或两者兼而有之?)能够在 SQL Server 方面发挥一些魔力,以尝试主要自动找出存储过程可能返回的内容。我不认为它一直有效,它只是复杂的猜测工作,我严重怀疑它是否适用于 Oracle。我不知道任何其他软件方面的东西,甚至试图找出存储过程可能返回的内容。

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

    1. 数据库中的一组静态基础数据
    2. 能够将所有可能的输入传递给存储过程并执行存储过程,而不会产生任何负面影响或副作用

    对于任何给定的有效输入,这将为您提供一组静态的可能输出。数据库中数据的微小变化可能会使一切无效。

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

    【讨论】:

    • 谢谢,这正是我一直在寻找的那种布局。
    猜你喜欢
    • 2010-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多