【发布时间】:2011-01-12 05:37:37
【问题描述】:
问题:
- 由 DBA 控制的数据库,具有仅限存储过程的授权。
- 期望在 POCO 中定义域。
所以我决定需要一个为存储过程和/或遗留数据库设计的 ORM。
理想情况下,ORM 应该允许我以声明方式(或流畅地)将域对象映射到 CRUD 存储过程。
迄今为止的一些发现:
- NHibernate 只要我能控制为延迟加载而生成的查询就可以工作。
-
iBATIS.NET 可以完美运行,但我找不到任何示例:
- 对象状态跟踪(新/更新/删除/等)
- 父/子提交事务(如果父更新,也更新所有脏子对象)。
- 内部开发的 ORM 可与我们的数据库约定配合使用是一种选择,我们已经开始使用它。但我想确保我们别无选择。
非选项:
- SubSonic 确实包装了存储的过程,但它不在过程和实体之间映射。如果需要的话,我可以实现某种映射器,但还有其他因素也对 SubSonic 不利,例如缺乏 VS2005(或 SharpDevelop)支持以及将数据访问与域对象混合。
- 删除 SProcs 不是一种选择。数据完整性是 DBA 和上级人员非常关心的问题,他们觉得使用 SProcs 是最安全的。我不是说服他们的地方。
有谁知道适合我需要的 ORM,或者有一种方法可以克服 ORM 中不能 100% 满足我需要的限制?
欢迎提出任何建议!
【问题讨论】:
-
我不确定“脏跟踪”或“级联更新”是否是我正在谈论的功能的良好描述性术语......我从来没有传达过这个问题,所以我有不知道正确的术语是什么。
-
就我个人而言,我会放弃 dba,让他做一些比写 sprocs 更有用的事情
-
我不会强制执行仅存储过程的规则,但公平地说:我看到将域对象映射到查询而不是表的好处。所以即使我们确实摆脱了存储过程,我仍然想知道我的选择是什么。
-
您的 DBA 编写视图而不是存储过程怎么样?您可以使用 NHibernate 轻松映射视图,并且 DBA 保留他的图层。
标签: .net nhibernate stored-procedures orm ibatis.net