鉴于以下要求,我正在尝试利用 ORM:
1) 使用.NET Framework(最新的Framework 还可以)
2) 必须能够互换使用Sybase、Oracle、MSSQL
3) 架构大多是静态的,但也有动态的部分。
我对 SubSonic 和 NHibernate 有点熟悉,但并不深入。
我觉得 ORM 可以做我想做的事,但我现在不知道如何利用它。
SubSonic 可能不是最优的,因为它目前不支持 Sybase,并且我现在为它编写自己的提供程序超出了我的资源和能力。
对于#3(上图),有几个元数据表,它们描述了供应商可以“装订”到现有数据库的表。
我们将这些称为MetaTables和MetaFields。
有一个基本的静态模式,ORM(NHibernate ATM)可以很好地处理它。
但是,供应商可以(物理地)将表添加到数据库中,只要他们还将数据添加到元数据表中以描述其结构即可。
我真正想要的是能够以某种方式用元数据(以它可以理解的方式)“喂养”ORM,并在那时让我能够操纵数据。
我的主要目标是减少我必须在这些动态表上构建的通用 SQL 语句的数量。
我还想避免担心发送到 Sybase、Oracle 或 MSSQL 的 SQL 的差异。
我的主要问题是我无法让 ORM 知道动态表,直到运行时才能访问元数据
编辑:使用示例可能类似于此处概述的示例:
IDataReader rdr=new Query("DynamicTable1").WHERE("ArbitraryId",2).ExecuteReader();
(但是,SubSonic 似乎无法工作,因为没有 Sybase 提供程序(见上文)