使用 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

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

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

posted on   阳春三月  阅读(1031)  评论(3编辑  收藏  举报

编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库

导航

< 2009年6月 >
31 1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 1 2 3 4
5 6 7 8 9 10 11

统计

点击右上角即可分享
微信分享提示