数据库源码操作(代码生成工具合成之路)
数据库源码操作(代码生成工具合成之路)迁入的项目源码代码生成工具主要是使用这个源码里的获取数据库表结构,虽然UI使用的是WinForm实现,但其核心代码使用独立的项目实现,并不影响迁入到代码生成工具,哪怕是把UI嵌入,WPF也是支持嵌入WinForm界面的。数据表设计数据库对比生成导出脚本
代码生成工具需要支持MsSQL Server,MySql,Oracle,而且后续还要扩展支持更多的数据库;
花了点时间 ,在Github上找到了一个叫DatabaseManager源码,直白翻译过来的中文名就是数据库管理工具,刚也目前支持MsSql Server,MySql,Oracle,看了源码,支持通过实现接口,扩展支持更多的数据库。
主界面
这个数据库管理工具的功能还是很完善的,支持数据库查询、SQL脚本编辑(带代码提示)、数据表设计、表复制、生成导出数据库脚本,数据库转换、数据库对比等常用的数据库管理工具的功能。
数据表设计
数据库对比
生成导出脚本
代码生成工具主要是使用这个源码里的获取数据库表结构,虽然UI使用的是WinForm实现,但其核心代码使用独立的项目实现,并不影响迁入到代码生成工具,哪怕是把UI嵌入,WPF也是支持嵌入WinForm界面的。
迁入的项目源码
代码生成工具只要迁入上图这两个项目,然后通过编码使用DatabaseInterpreter.Core.DbInterpreter类来获取数据库结构,下面是我在代码生成工具的实现代码:
private DbInterpreter GetDbInterpreter(ConnectionInfo connectionInfo bool isSimpleMode = true)
{
DbInterpreterOption option = isSimpleMode ? simpleInterpreterOption : new DbInterpreterOption() { ObjectFetchMode = DatabaseObjectFetchMode.Details };
option.ThrowExceptionWhenErrorOccurs = false;
DbInterpreter dbInterpreter = DbInterpreterHelper.GetDbInterpreter(connectionInfo.DatabaseType connectionInfo option);
return dbInterpreter;
}
public async Task LoadDbObject(DatabaseObjectInfo parent)
{
DbInterpreter dbInterpreter = this.GetDbInterpreter(parent.ConnectionInfo false);
DatabaseObjectType databaseObjectType = DbObjectsTreeHelper.GetDbObjectTypeByFolderName(parent.ObjectType.ToString());
dbInterpreter.Subscribe(this);
SchemaInfo schemaInfo = parent.ObjectType == DbObjectTreeFolderType.None ? new SchemaInfo() :
await dbInterpreter.GetSchemaInfoAsync(new SchemaInfoFilter() { DatabaseObjectType = databaseObjectType });
parent.Children.Clear();
switch (parent.ObjectType)
{
case DbObjectTreeFolderType.Tables:
AddDbObjectChildren(parent schemaInfo.Tables);
break;
case DbObjectTreeFolderType.Views:
AddDbObjectChildren(parent schemaInfo.Views);
break;
case DbObjectTreeFolderType.Functions:
AddDbObjectChildren(parent schemaInfo.Functions);
break;
case DbObjectTreeFolderType.Procedures:
AddDbObjectChildren(parent schemaInfo.Procedures);
break;
}
}
实际上,我花了一点点时间 ,参考现有源码的界面,使用WPF实现在大部分界面功能,嘿嘿~~
WPF实现的数据管理界面
源码地址:https://github.com/victor-wiki/DatabaseManager
下期预告:代码生成工具:整合JNTemplate模板引擎