用Way.EntityDB进行Entity Framework Core数据库建模

Way.EntityDB是一个基于EF Core的数据层框架,它取消了EF Core的Migration机制,因为Migration并不是通用的,比如说sql server生成的migration,如果换成sqlite,运行时会报错的,也就是数据库不能更换。

Way.EntityDB内置建模工具,通过图形化建表,生成Model对象代码,并且它会把表结构的修改过程,全部记录下来,涵盖在Model代码里面,所以,在新的代码运行时,数据库也会自动更新到最新结构。

 举个例子,当你把一个字段的名字从column1,更改为column2,EF Core生成的migration,就是把column1删除,并添加一个column2,这样,column1的现有数据就会丢失。而EntityDB则不一样,它只会把column1改名为column2,

因为它记录的是表结构修改的过程,而不是匹对Model类的前后变化。

 

Way.EntityDB源码位置:

https://github.com/simpleway2016/EntityDB

启动服务器端

Way.EntityDB是允许多人同时使用,所以,分为服务器和客户端。

下载源码,编译后,在Debug/netcoreapp2.0文件夹里面,创建一个批处理文件run6062.bat,内容如下:

dotnet Way.EJServer.dll 6062

6062是本机任意一个没有使用的端口号,表示以6062为端口,创建一个服务器工作空间

运行run6062.bat,启动服务器端

640?wx_fmt=png

 

运行客户端

编译并运行EJClient.exe

server url:https://localhost:6062

user name:sa

password:1

640?wx_fmt=png

登录进去,由于没有工程项目,所以界面空白,点击【project】菜单,创建一个项目

640?wx_fmt=png

右键点击【Database】,新建一个数据库

640?wx_fmt=png

再新建一个数据模块UserInfo

640?wx_fmt=png

双击UserInfo,在数据模块里面,空白处点击右键,新建数据表

640?wx_fmt=png

 

 

 640?wx_fmt=png

640?wx_fmt=png

这样,一张数据表就创建完成

你必须掌握的Entity Framework 6.x与Core 2.0

作者:汪鹏

当当 广告
购买


编程使用数据表

新建一个.net core 控制台项目

640?wx_fmt=png

给这个项目安装nuget包:Way.EntityDB

然后,回到EJClient,在TestDB处点击右键,点击【生成数据库模型代码】

640?wx_fmt=png

保存到刚才创建的项目里面

640?wx_fmt=png

640?wx_fmt=png 

 这样,Model类就准备好了,开始写代码

640?wx_fmt=png

从代码可以看到,虽然也是EF Core,但由于禁用了ef的数据缓存机制,所以不能使用SaveChanges去同步数据库,可以使用Insert Update Delete等方法同步数据库

禁用缓存机制,可以避免程序员在编程的时候混乱(有时候想把数据取出来,看看现在的数据状态,但谁知道取的是缓存里面的对象)

禁用缓存机制,对于大数据量的查询,也可以节约内存,提供效率,因为不再使用的对象,不会保存在内存里面

所以整体性能,应该和使用ADO.Net差不多

编写触发器 

 Way.EntityDB支持类似触发器的功能。添加一个ActionCapture类

640?wx_fmt=png

class UserInfoTrigger : Way.EntityDB.ActionCapture<MyDB.UserInfo>  表示这个类捕获的是UserInfo表的事件
这时候,这个类还不能起作用,必须在程序启动时,把它实例化,注册到DBContext里面
        static Program(){Way.EntityDB.DBContext.RegisterActionCapture(new UserInfoTrigger());}

在ActionCapture类里面,只要override各个方法,就可以实现各种事件的捕获。

级联删除

 EJClient可以设置表之间的级联删除关系,并且,被级联删除的数据,同样可以被你编写的触发器捕捉到。

现在,我们新建一张数据表FamilyInfo

640?wx_fmt=png

双击UserInfo,打开属性框,切换到【级联删除】项,添加一个级联删除关系

640?wx_fmt=png

导航属性(一对一)

虽然UserInfo和FamilyInfo,在数据库中并没有建立关系,但是,从系统设计上来说,他们是有关系的,所以,在UserInfo里面,如果可以直接访问FamilyInfo,会比较方便,所以,

可以给他们添加导航属性,首先,我们假设他们是一对一的关系。

打开UserInfo属性窗口,切换到【导航属性】,并添加一个名称为Family的属性

640?wx_fmt=png

然后,打开FamilyInfo属性窗口,添加一个User属性

640?wx_fmt=png

这里要注意,UserInfo里面的Family属性,不需要选择ForeignKey,而FamilyInfo的User属性,必须选择ForeignKey

接着用EJClient生成Model代码

然后,代码,我们可以这样写了

640?wx_fmt=png

var montherName = jack.Family.MotherName;直接可以取到母亲姓名,不需要到数据库再取一遍

 导航属性(一对多)

 如果UserInfo和FamilyInfo是一对多的关系,那么,打开userinfo对话框,把导航属性改为这样:

640?wx_fmt=png

这时候,就必须选择ForeignKey了

用工具再次生成Model代码

这次的代码,就是这样写了:

640?wx_fmt=png

变更数据库类型

如果在开发过程中,你要变更数据库类型,只需要更改连接字符串和类型即可

 var db = new MyDB.DB.TestDB("server=192.168.136.137;uid=sa;pwd=Sql12345678;Database=TestDB", Way.EntityDB.DatabaseType.SqlServer);

这样,就转而使用SqlServer数据库

原文地址:https://www.cnblogs.com/IWings/p/9304874.html

.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com

640?wx_fmt=jpeg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/320816.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AT4513-[AGC030D]InversionSum【dp】

正题 题目链接:https://atcoder.jp/contests/agc030/tasks/agc030_d 题目大意 nnn个数&#xff0c;ppp次操作可以选择操作或者不操作&#xff0c;询问所有情况下逆序对的总和。 解题思路 转换成期望的问题&#xff0c;设fi,jf_{i,j}fi,j​表示所有情况下ai<aja_i<a_jai…

【dfs】【模拟】【树】I Like Matrix Forever!

I Like Matrix Forever! 题目大意&#xff1a; 有一个01矩阵&#xff0c;有一些操作&#xff1a;反转一个位置的数&#xff0c;反转一行的数&#xff0c;反转一列的数&#xff0c;回到第i次操作&#xff0c;每一次操作还要输出1的个数 原题&#xff1a; 题目描述 对一个 n…

Full_of_Boys训练4总结

题目来源&#xff1a;2017-2018 ACM-ICPC Southwestern European Regional Programming Contest (SWERC 2017) A.Cakey McCakeFace #include <bits/stdc.h> #define pb(x) push_back(x) typedef long long ll; const int maxn 20007; using namespace std; int n,m; ll …

.NET Core开发日志——Runtime IDentifier

.NET Core对于传统.NET开发人员而言是既熟悉又陌生的新平台&#xff0c;所以有时遇上出乎意料的事情也纯属正常情况。这时只需点耐心&#xff0c;多查查资料&#xff0c;努力找到原因&#xff0c;也未尝不是件有意义的体验。比如当建完一个最简单的控制台应用程序&#xff1a;d…

P3723-[AH2017/HNOI2017]礼物【FFT】

正题 题目链接:https://www.luogu.com.cn/problem/P3723 题目大意 两个长度为nnn的序列xxx和yyy&#xff0c;可以旋转序列xxx之后让一个序列的所有数加上一个非负整数ccc。 要求最小化∑i1n(xi−yi)2\sum_{i1}^n(x_i-y_i)^2i1∑n​(xi​−yi​)2 解题思路 其实就是要求最小…

初一模拟赛总结(5.11)

成绩&#xff1a; rank是有算其他dalaodalaodalao的 rankrankranknamenamenamescorescorescoreT1T1T1T2T2T2T3T3T3T4T4T4T5T5T5333lyflyflyf420420420100100100100100100100100100100100100202020444hkyhkyhky400400400100100100100100100100100100100100100000444fyfyfy40040…

Full_of_Boys训练5总结

题目来源&#xff1a;2017-2018 ACM-ICPC, NEERC, Moscow Subregional Contest A. Advertising Strategy 贪心方法&#xff1a;把一部分k放到初始值&#xff0c;剩下一部分&#xff0c;等到最后用。然后&#xff0c;枚举第一部分放多少即可。 #include <bits/stdc.h> typ…

C#语法——await与async的正确打开方式

C#5.0推出了新语法&#xff0c;await与async&#xff0c;但相信大家还是很少使用它们。关于await与async有很多文章讲解&#xff0c;但有没有这样一种感觉&#xff0c;你看完后&#xff0c;总感觉这东西很不错&#xff0c;但用的时候&#xff0c;总是想不起来&#xff0c;或者不…

jzoj1753-锻炼身体【单调队列】

正题 题目大意 n∗mn*mn∗m的有障碍物的网格&#xff0c;开始在(xs,ys)(x_s,y_s)(xs​,ys​)。有kkk段时间网格会倾斜&#xff0c;对于倾斜的方向可以选择移动或者不移动&#xff0c;求最长移动距离。 解题思路 因为每段时间方向唯一&#xff0c;所以我们对于每一列或每一行分…

【并查集】打击犯罪(ssl 2342)

打击犯罪 ssl 2342 题目大意&#xff1a; 有n个人某些人之间有连接&#xff08;连接成一个团伙&#xff09;&#xff0c;现在要最大的团伙人数不大于n/2&#xff0c;要最少要删掉几个人&#xff08;要按顺序删&#xff09; 原题&#xff1a; 题目描述&#xff1a; 某个地…

Full_of_Boys训练6总结

题目来源&#xff1a;2014-2015 ACM-ICPC, Asia Xian Regional Contest F. Color 第一道二项式反演。。膜题解: https://www.cnblogs.com/wmrv587/p/6681953.html #include<bits/stdc.h> typedef long long ll; const ll mod 1e9 7; using namespace std; ll q_pow(ll …

好代码是管出来的——.Net Core集成测试与数据驱动测试

软件的单元测试关注是的软件最小可执行单元是否能够正常执行&#xff0c;但是软件是由一个个最小执行单元组成的集合体&#xff0c;单元与单元之间存在着种种依赖或联系&#xff0c;所以在软件开发时仅仅确保最小单元的正确往往是不够的&#xff0c;为了保证软件能够正确运行&a…

Full_of_Boys训练7总结

题目来源&#xff1a;2016沈阳区域赛 C.Recursive sequence 矩阵快速幂&#xff0c;思路来自oldz #include <bits/stdc.h> typedef unsigned long long ll; const ll mod2147493647; using namespace std; ll A[7][7]{{1,0,0,0,0,0,0},{1,1,0,0,0,0,0},{1,2,1,0,0,0,0},{…

CF961G-Partitions【斯特林数】

正题 题目链接:https://www.luogu.com.cn/problem/CF961G 题目大意 nnn个物品分成kkk个组&#xff0c;每个物品权值为wiw_iwi​。一个子集SSS的权值为∣S∣∑x∈Swx|S|\sum_{x\in S}w_x∣S∣∑x∈S​wx​。 求所有划分方法的权值和。 解题思路 考虑对于每个数wiw_iwi​的贡献…

【高精】【快速幂】穿越丛林(ssl 2314)

穿越丛林 ssl 2314 题目大意&#xff1a; 求2n2^n2n 原题&#xff1a; 题目描述&#xff1a; ljj 是一位富有冒险心又很喜欢研究数学的孩纸&#xff0c;有一天&#xff0c;他到一个丛林冒险&#xff0c;这里的树长有像0、4、6、8、9这样形状的洞&#xff0c;他要想穿过丛…

谈谈surging引擎的tcp、http、ws协议和如何容器化部署

1、前言分布式已经成为了当前最热门的话题&#xff0c;分布式框架也百花齐放&#xff0c;群雄逐鹿。从中心化服务治理框架&#xff0c;到去中心化分布式服务框架&#xff0c;再到分布式微服务引擎&#xff0c;这都是通过技术不断积累改进而形成的结果。esb,网关&#xff0c;ngi…

2018陕西省赛K题[watermelon_planting]

题意:有一个序列a[]&#xff0c;描述的是另一个序列ans[]每个位置单位时间的增量。每个单位时间每个位置都会增加一个单位对应增量。时间总长m&#xff0c;每个单位时间包含有两种操作中的一个&#xff1a;1.询问ans[]在[l,r]区间的和&#xff1b;2.修改&#xff1a;a[]在[l,r]…

【并查集】银河英雄传说 (luogu 1196/ssl 1225)

银河英雄传说 luogu 1196 ssl 1225 题目大意&#xff1a; 有n列船&#xff0c;每列一开始有一艘船&#xff0c;可以将某一艘船所在的列所有船接到另外一列&#xff0c;然后会问某两艘船是否在一列&#xff0c;如果在那中间有多少艘船 原题&#xff1a; 题目描述 公元五八…

P4827-[国家集训队]Crash 的文明世界【树形dp,换根法,斯特林数】

正题 题目链接:https://www.luogu.com.cn/problem/P4827 题目大意 一颗nnn个点的树&#xff0c;定义dis(i,j)dis(i,j)dis(i,j)表示树上i,ji,ji,j两点的距离&#xff0c;对于每个iii求∑j1ndis(i,j)m\sum_{j1}^ndis(i,j)^mj1∑n​dis(i,j)m 解题思路 根据斯特林数的性质我们有…

Helm - Kubernetes服务编排的利器

Helm介绍在Kubernetes中部署容器云应用&#xff08;容器或微服务编排&#xff09;是一项有挑战性的工作&#xff0c;Helm就是为了简化在Kubernetes中安装部署容器云应用的一个客户端工具。通过Helm能够帮助开发者定义、安装和升级Kubernetes中的容器云应用。同时&#xff0c;也…