多ORM解决方案

时间:2010-07-20 13:10:22

标签: .net architecture orm

我想知道开发多ORM解决方案的最佳方法是什么。

到目前为止,我看到的所有项目都与ORM的选择密切相关,他们坚持到最后。 Nhibernate,Castle ActiveRecord,Linq to SQL,WilsomORM,LLBLGen,SubSonic,Entity Framweork,其他......

我在想是否应该将这个选择的强烈关系与项目的其余部分分开。在某种程度上我可以随时改变ORM。

现在唯一的想法就是“工厂”检索我的ORM对象,然后我将它映射到一些“内部”对象。

有些情况下,项目开始时有一些限制并且在那个时候作出了决定,除了在不同的区域选择一个特定的ORM或其他东西之外,不提供任何其他选择。

但是稍后,几个月,一年左右,许多事情发生变化,更多资金,更多支持,技术进步,新框架/想法等......为我们提供了更好的选择,在这种情况下它会能够在没有应用程序重大变化的情况下更改ORM真的很酷(在这个时候可能是巨大的变化)。

我想知道你的意见。

谢谢你们。

3 个答案:

答案 0 :(得分:3)

更改ORM始终是一个耗时的过程,因为ORM提供的抽象将始终渗透到您自己的代码中,即使您没有意识到:ORM的功能(或缺少某些功能!)将在您的代码中显示。选择基于linq的ORM将使切换更容易,因为查询可以更容易地转移到另一个ORM(如果那个也支持linq)。但这将是一项很多工作,所以选择一个功能丰富的ORM前端是明智的。

另一个问题是映射定义,模型本身:如果没有正确的工具,很难(如果不是不可能的话)将其转换成另一个。如果你看一下像LLBLGen Pro v3(http://www.llblgen.com)这样的设计师你可以使用相同的项目,相同的实体模型和不同ORM的映射和切换很容易(你当然还需要更新自己的代码)。

(免责声明:我是LLBLGen Pro的首席开发人员。

答案 1 :(得分:2)

恕我直言,这将永远是一个硬核解决方案。将ORM类与一些内部类映射将始终导致“双重工作”和问题。某些数据库架构更改将在此映射类中再次需要更改,由于某种原因,这将需要额外注意不要忘记。

还要注意的其他事项:事务,延迟加载,由于某种原因某些ORM的行为与其他ORM不同,或者具有或不具有该功能。假设所有相似都不正确。考虑到这一点,我认为,这不是那么简单。

答案 2 :(得分:0)

更改您的ORM可能会导致更改您的数据访问层。 每个ORM都有自己的生成代码架构。 我同意Frans Bouma。 ((选择基于linq的ORM将更容易切换,因为查询可以转移到另一个ORM(如果那个也支持linq)更容易)) 你可以开发自己的ORM并使它能够生成LINQ查询吗?能够 ?! 祝你好运