【发布时间】:2010-11-09 13:42:59
【问题描述】:
ORM 与现有数据库之间的兼容性如何?在数据库本身内强制执行了许多约束(特别是唯一键约束/除了主键之外的唯一索引)?
(通常这些是预先存在的数据库,由众多遗留应用程序共享。但良好的数据库建模实践是在数据库中定义尽可能多的约束,作为对应用程序的双重检查。另外请注意,我是数据库引擎不支持延迟约束检查。)
我问的原因是我研究过的 ORM,NHibernate 和 Linq to SQL,在存在数据库唯一约束的情况下似乎不能很好地支撑。例如,删除一行并重新插入具有相同业务键的行会导致外键异常。 (还有一些微妙的、更难避免的例子。)ORM 遵守主键和外键约束,但往往忽略唯一约束。
我了解有一些变通方法,例如 NHibernate 刷新方法。但是,我觉得这是一个非常有漏洞的抽象,并且很难设计应用程序来考虑分离关注点。理想情况下,所有对象都可以通过子程序在内存中进行操作,然后主程序可以负责调用以实际同步数据库。这将隔离更新并允许自定义逻辑在所有更新实际提交到数据库之前检查它们。
以正确的顺序执行命令并非易事。请参阅我的问题here。尽管如此,我期待对流行的 ORM 中的常见情况提供更好的支持。这对于将 ORM 引入现有环境似乎非常重要。
鉴于这些问题,您在使用 ORM 技术方面有哪些经验?
【问题讨论】:
标签: database nhibernate linq-to-sql orm constraints