环境:netcore2.0
DB :mysql
ORM:Ant
https://github.com/yuzd/AntData.ORM/tree/netcore2
[给我一个star吧]
NUGET:
Install-Package AntData.Core.Mysql
测试的表结构:
![](https://yqfile.alicdn.com/img_890b6bc08b2433899e48eb3a48316f6f.jpeg?x-oss-process=image/resize,w_1400/format,webp)
新建一个netcore app项目
然后添加一个 名称为 Model 的 .Net Standard2.0 项目
![](https://yqfile.alicdn.com/img_e60bb593838c0b556ccfe26ccf574c58.jpeg?x-oss-process=image/resize,w_1400/format,webp)
从
https://github.com/yuzd/AntData.ORM/tree/netcore2/AntData/AntData.DbModels
里面copy出3个文件夹放入到 刚刚新建的 Model
的项目中
![](https://yqfile.alicdn.com/img_3d441db3f8e3ef18e0ea400c83ff5794.jpeg?x-oss-process=image/resize,w_1400/format,webp)
打开上图中的 EntityRobotForMysql.tt 脚本文件 然后把里面的 db的信息替换成自己的
person 和 school表 虽然没有在db层建立 主外键关系
然后依然可以在orm层映射主外键关系【这个也是ant orm的一个特色】
在 EntityRobotForMysql.tt 加入下面的代表 就能映射2个表的主外键关系了
![](https://yqfile.alicdn.com/img_c288d328ee1fd87d36d515e74ffa8ab1.jpeg?x-oss-process=image/resize,w_1400/format,webp)
然后按 Ctrl+S 触发生成 model 文件
分为三部分
1:Entitys类 相当于db ,每个 IQueryable类型的Property 相当于 一个Table
2:具体的每个table的定义
3:table的扩展类
![](https://yqfile.alicdn.com/img_0b69dc979da77ee383cdfd56ea308a39.jpeg?x-oss-process=image/resize,w_1400/format,webp)
var person = DB.Tables.People.FirstOrDefault(r => r.Name.Equals("nainaigu"));
这个的意思是 查询 person表里面第一个 name = nainaigu 的row
那如何加载外键 scholl的意思呢
使用LoadWith 方法 的意思是 查询的时候加载外键,外键我们刚刚在tt文件里面配置了
var person = DB.Tables.People.LoadWith(r=>r.School).FirstOrDefault(r => r.Name.Equals("nainaigu"));
![](https://yqfile.alicdn.com/img_a25231521851041683326633ee13cf19.jpeg?x-oss-process=image/resize,w_1400/format,webp)
![](https://yqfile.alicdn.com/img_348932698f21495532c3883a9b8c9ae4.jpeg?x-oss-process=image/resize,w_1400/format,webp)
总结:
一般dba都不会建议你直接在db里面建主外键。都建议在代码层控制。
使用antorm框架在配置一下主外键映射关系,代码中用loadWith加载外键model 提供了便捷。
针对orm框架如果您有好的建议请畅所欲言
附demo下载
如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!欢迎各位转载,转载文章之后须在文章页面明显位置给出作者和原文连接,谢谢。