小工具:从数据库生成对应的 DbContext 和 Table
2018-08-12 本文已影响42人
俊果果
一、出发点
edmx 生成数据库 model 有方便的因素,但是多人协作冲突比较烦人,其依赖的 xml 文件信息太多,不好处理 conflict
二、解析
工具 EntityFramework Reverse POCO Code First Generator 可以较方便地生成,但是缺少数据可视性,并且生成的 Model 不支持 EFCore
三、解决
在该 repository 的基础上,新建一个 winform 工具,可以根据项目中已有的 Dbcontext 模板和 Model Class 模板填充进所选数据库相关【表】的内容,如:Attribute,Comment 等
四、示例
- 项目地址:点我查看
-
项目结构
image.png -
POCO 项目重点关注两个文件
image.png
-
TablesToGenerate.json
存储配置:哪些表需要被用来生成Model -
Settings
类用于相关配置:
ConnectionStringName
配置在 App.config 中
或者也可以直接给ConnectionString
和ProviderName
赋值 -
POCOClassTemplateFile
配置表生成对应实体类的模板文件
image.png
运行后,模板中{0}
位置会添加类对应到表的注释;{1}
位置会添加类名;{2}
位置会添加表中每列对应生成的属性信息 -
DbContextTemplateFile
配置生成的Dbcontext类的模板文件
image.png
运行后,模板中{0}
位置会被替换为 DbSet<> 的一系列属性;{1}
位置会被替换为 ModelBuilder 中对每个表做主键映射的操作 - 注意:Dbcontext 和 Model class 类会被生成为和相应模板文件相同文件夹的位置;Model 文件以类名命名;Dbcontext 类命名与模板相同,后缀不同
- 注意:模板文件中若包含
{
或者}
,请务必连用两个作为转义,不然会报错
- 使用
打开界面,加载出相关信息
image.png
包括配置的 数据库连接字符串、相关模板文件位置,已经映射的表等
左侧选择表,点击Add Selected
添加到右侧待映射列表中,然后点击Generate POCO
系统自动生成表对应的 Model 类,并更新 DbContext
image.png - 若对 Model 类和 DbContext 类有自定义的代码,建议将模板文件改为
partial class
,然后把逻辑另外写在partial
文件中,因为每次运行都会自动重新生成这两种文件
五、后续
添加界面的表过滤功能(done)支持配置项设置到 json config(app.config done)- 添加外键引用支持?