前言
使用过EntityFramework6的朋友应该都知道EF中的PowerTools这个工具可以帮助初学者或者开发人员快速构建一个EF的数据上下文,并且可以很直观的看到实体之间的关系。不过目前升级到EFCore后就只有命令行工具,并不那么直观。今天和大家介绍的工具也是具有同样的作用。
首先大家需要去微软的Visual Studio Marketplace下载并安装VS扩展Mego Tools,通过一系列安装过程中再次打开Visual Studio后就可以在扩展和更新对话框中找到这个扩展,说明已经安装成功。
从新项目开始
为了能更直观一点我们新建一个C#控制台(.Net Fraemwork)项目,这个大家都会的,然后通过添加项对话框可以找到名为Mego 数据上下文的项模板,如果没有在根分类中找到可以在搜索对话框中查找Mego关键字就可以出现该模板。
选择数据源
双击启动该模板后就可以进行向导界面,第一步就是要选择数据源,对于第一次使用的朋友来说是需要新建一个数据源,可以从下拉菜单中选择你需要连接数据库(即提供程序),目前该扩展支持 SQL Server、Oracle、PostgreSQL、SQLite 等八种数据库,这里我们以Oracle为例 ,建议大家给连接起一个好记的名称,以便后面再次选择。数据源设置界面如下图所示。点高级按钮可以出现右边的详细设置界面,可以设置连接的每一个参数。这个同EF的PowerTools工具是一样的。
对于非NET Core类型的项目在选好数据源之后可以设置将当前连接信息保存到App.config或者Web.config文件中,这个工具会自动识别。
选择数据库对象
选好连接点下一步后,工具会加载当前数据库所有表或视图对象,根据需要可以选择要生成的表及表中的列,并且可以做一些代码生成的设置,主要设置项目如下:
- 生成类型的类名及上下文属性名
- 生成类型的注释
- 生成列属性名,是否为空、注释及强制数据库类型
- 如果是特殊类型可以设置精度、长度等信息
- 当前列是否参与并发检查(这个仅对非本地数据库有用)
在下一个版本中会支持数据关系生成。
最后还可以以单复数形式生成代码。
通过以上设置后点完成即可生成如下代码。
using System;
using System.Collections.Generic;
using System.Linq;
using Caredev.Mego;
using Caredev.Mego.DataAnnotations;
using mego = Caredev.Mego.DataAnnotations;
namespace ConsoleApp1
{
public class Model1 : DbContext
{
public Model1()
: base("Model1")
{ }
public DbSet<COUNTRy> COUNTRIES { get; set; }
public DbSet<JOB> JOBS { get; set; }
}
[Table("COUNTRIES", Schema = "HR")]
public class COUNTRy
{
[Key, mego.String(2, true)]
public string COUNTRY_ID { get; set; }
[Nullable(true), mego.String(40)]
public string COUNTRY_NAME { get; set; }
public decimal REGION_ID { get; set; }
}
[Table("JOBS", Schema = "HR")]
public class JOB
{
[Key, mego.String(10)]
public string JOB_ID { get; set; }
[mego.String(35)]
public string JOB_TITLE { get; set; }
[Precision(6, 0)]
public decimal MIN_SALARY { get; set; }
[Precision(6, 0)]
public decimal MAX_SALARY { get; set; }
}
}
对于非NET默认支持的数据库还需要安装相应的连接提供程序,这里我们使用的是Oracle还需要安装Nuget包:Oracle.ManagedDataAccess。
然后我们就可以访问Oracle的数据库了,例如下面示例代码。
using (var db = new Model1())
{
var data = db.JOBS.ToArray();
}
工具代码
该扩展的代码都已上传Github,
https://github.com/CarefreeXT/MegoTools
欢迎大家提出问题改进。