使用 MyMeta 组件获取数据库结构

使用 MyMeta 组件获取数据库结构

    MyMeta 组件是代码自动生成工具 MyGeneration 的核心模块之一,主要负责定义和获取关系数据库结构。在 MyMeta 中定义了一套比较完整的关系数据库对象结构,并提供获取(反向工程)这些对象的方法。使用 MyMeta 能轻松地获取到数据库中大部分类型的对象的元信息,这些对象包括架构(Schema)、表、视图、存储过程、索引、列、主键、外键、存储过程参数等,虽然关系数据库中的对象类型不止这些,但对我们一般的软件开发来说,这些信息足够了。另外 MyMeta 还支持了足够多的关系数据库类型,可以说市面上能见到的数据库系统都支持了,包括MS Access、MS SQL Server、Oracle、MySQL、DB2、Firebird、PostgreSQL、Pervasive、SQLite、VistaDB 等,并且可灵活扩展。当然,MyGeneration 全部开源,这也是我最终决定在项目中使用 MyMeta 的重要原因。

    MyMeta 的使用方法也非常简单,项目中添加对 MyMeta.dll 的引用后,用如下几行代码即可获得整个数据库的结构:

Code
string connString = "Data Source=forrest;Persist Security Info=True;User ID=oraUser;Password=oraUserpwd";

MyMeta.dbRoot root 
= new MyMeta.dbRoot();
root.ShowDefaultDatabaseOnly 
= true;

root.Connect( MyMeta.dbDriver.Oracle, connString );

foreach( MyMeta.Database db in root.Databases )
        Console.WriteLine( 
"数据库 {0} 有 {1} 个表,{2} 个视图。", db.Name, db.Tables.Count, db.Views.Count );

    MyMeta.dbRoot 是使用 MyMeta 时最重要的类型之一,是访问数据库对象的根,所有的数据库架构(Schema)对象都可以通过 dbRoot.Databases 集合访问到。

    我在使用的过程中发现两个问题,一是 dbRoot 的 ShowDefaultDatabaseOnly 属性似乎不起作用,不管设为 true 还是 false,每次都是获取到登录用户有权限看到的所有数据库;二是连接 MS SQL Server 时,无法获取视图中列的说明信息,即列的扩展属性 MS_Description 的值。这两个问题从源码中跟踪调试的情况来看,应该属 bug,在修改了相关源码并重新编译后,运行正常。
 
MyGeneration 官网:http://www.mygenerationsoftware.com/portal/default.aspx
 
选型过程:
    最近的一个项目中有获取数据库元信息的功能,要求不高:获取表和视图的列信息,包括说明信息(Oracle 中的 comment,SQL Server 中 MS_Description);支持多种类型数据库。我马上想到了网上众多的代码自动生成工具,获取数据库元信息是代码自动生成工具的必备功能,我只用这一点就行。在下载试用了 CodeSmith、CodeMaker、CodePlus、Nowind.EnterpriseORM 和 MyGeneration 后,从复用数据库元信息获取组件的角度看,前四个有的要许可,有的支持数据库类型少,有的模块、层次划分不清晰不适合复用,最终选择了 MyGeneration 的 MyMeta。其实从名气上来说 CodeSmith 是最大的,它提供这个功能的组件叫 SchemaExplorer,结构设计非常合理,扩展性也很强,本打算用了。但后来发现其不支持说明信息,对 Oracle 的支持也不够,竟然不支持视图,而且最新版本需要注册才能用,弃之。

你可能感兴趣的:(使用 MyMeta 组件获取数据库结构)