隔离环境中的对象关系模型(ORM)



我有兴趣为现有系统使用对象关系映射器,该系统是ASP.NET客户端、ASP.NET Web Services中间层和Oracle后端。所有数据库访问都是使用存储过程完成的,web服务中不允许使用SQL。我一直在调查NHibernate、Telerik的OpenAccess ORM和实体框架。我将其命名为"隔离",因为数据库受到DBA的严格控制。他们还控制数据库的设计,并重新设计数据库以实现适当的规范化(对于对象模型)几乎是不可能的。此外,允许该工具创建任何SQL也是不可能的。

我的问题是:考虑到这些限制,这些工具中的哪一个可以实现这种环境的最佳集成?

根本没有。

通过在存储过程中完成所有操作,您不会使用ORM 99%的功能。

可能最好使用像ServiceStack.OrmLite或Massive之类的Micro ORM…

但是,观察任何成熟的ORM,如NH、LightSpeed、EF,都是完全的过度杀伤,只会为0增益创造更多的复杂性。

完全使用存储过程实现数据访问并不意味着使用ORM不会获得任何价值。这只是意味着你可能不会使用它的一些好处。

至于您所评估的ORM,您可能已经注意到:

  • 所有这些都支持数据库优先的方法,在这种方法中,您可以在数据库已经定义后创建模型,这样您就不必以任何方式干扰DBA的工作,只需要求提供凭据
  • 实体框架和OpenAccess提供了开箱即用的模型的可视化表示,而NHibernate则没有
  • OpenAccess和NHibernate支持Oracle,而使用Oracle的实体框架则不那么直接
  • 实体框架和OpenAccess中的存储过程支持比NHibernate中的要复杂得多。在OpenAccess中,您甚至可以将存储过程映射到多个结果集

我希望这能有所帮助。

让我把这件事做好。您的限制是:

  • 你必须使用ORM
  • 您不能以任何方式修改数据库
  • 您只能使用存储过程

我想我同意@Phill的观点。当你不能使用一个完整的ORM的功能时,它就显得过于夸张了。

顺便说一句,我曾经在这样一个系统上工作过,在这个系统中,DBA主宰一切,只强制执行访问数据的程序。噩梦

最新更新