【问题标题】:Is there a Query-Mapper like iBATIS.NET but with dirty tracking, lazy-loading and cascading updates?是否有像 iBATIS.NET 这样的查询映射器,但具有脏跟踪、延迟加载和级联更新?
【发布时间】:2011-01-12 05:37:37
【问题描述】:

问题:

  1. 由 DBA 控制的数据库,具有仅限存储过程的授权。
  2. 期望在 POCO 中定义域。

所以我决定需要一个为存储过程和/或遗留数据库设计的 ORM。

理想情况下,ORM 应该允许我以声明方式(或流畅地)将域对象映射到 CRUD 存储过程。

迄今为止的一些发现:

  1. NHibernate 只要我能控制为延迟加载而生成的查询就可以工作。
  2. iBATIS.NET 可以完美运行,但我找不到任何示例:
    1. 对象状态跟踪(新/更新/删除/等)
    2. 父/子提交事务(如果父更新,也更新所有脏子对象)。
  3. 内部开发的 ORM 可与我们的数据库约定配合使用是一种选择,我们已经开始使用它。但我想确保我们别无选择。

非选项:

  1. SubSonic 确实包装了存储的过程,但它不在过程和实体之间映射。如果需要的话,我可以实现某种映射器,但还有其他因素也对 SubSonic 不利,例如缺乏 VS2005(或 SharpDevelop)支持以及将数据访问与域对象混合。
  2. 删除 SProcs 不是一种选择。数据完整性是 DBA 和上级人员非常关心的问题,他们觉得使用 SProcs 是最安全的。我不是说服他们的地方。

有谁知道适合我需要的 ORM,或者有一种方法可以克服 ORM 中不能 100% 满足我需要的限制

欢迎提出任何建议!

【问题讨论】:

  • 我不确定“脏跟踪”或“级联更新”是否是我正在谈论的功能的良好描述性术语......我从来没有传达过这个问题,所以我有不知道正确的术语是什么。
  • 就我个人而言,我会放弃 dba,让他做一些比写 sprocs 更有用的事情
  • 我不会强制执行仅存储过程的规则,但公平地说:我看到将域对象映射到查询而不是表的好处。所以即使我们确实摆脱了存储过程,我仍然想知道我的选择是什么。
  • 您的 DBA 编写视图而不是存储过程怎么样?您可以使用 NHibernate 轻松映射视图,并且 DBA 保留他的图层。

标签: .net nhibernate stored-procedures orm ibatis.net


【解决方案1】:

我认为 NHibernate 是您最好的选择。

您可以使用 loader、sql-insert、sql-delete、sql-update 元素为实体和延迟加载集合配置存储过程,尽管这意味着相当多的击键。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-03
    • 1970-01-01
    • 1970-01-01
    • 2011-09-11
    • 1970-01-01
    • 2019-11-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多