C# ef框架的那些事 2021-08-04 C# 暂无评论 ## 安装EF框架 主要是版本要对应上 1. mysql-for-visualstudio-1.2.9.msi 2. mysql-connector-net-8.0.26.msi 3. 微软的ef框架 4. mysql.data 5. mysql.data.entityframework > 这几个装好就能用了2和5的版本要对上 ## 增删查改 1. 增 ```c# Model.Add(表对象); Model.SaveChanges(); ``` 2. 删 ```c# Model.Remove(表对象);//对象中需要包含主键 Model.SaveChanges(); ``` 3. 改 ```c# var selectItem = Model.表对象.FirstOrDefault(o => o.对象属性 == 条件值); select.表属性=修改后的值; Model.SaveChanges(); ``` 4. 查 > 查有很多中方法 where() Selecte()结合lambda表达式来用 ## 分页 分页一般是点击了当前页数才加载当前的数据,关键点有 1. 一页显示多少个 2. 数据的总数 3. 显示的页数(一般是自动算出来的) ```c# var data = hgqModel.d_it_base_info.Select(o => o).OrderBy(o => o.createDate).Skip(pageinde*count).Take(count).ToList(); ``` > 1. 在使用`Skip()`之前需要先排序这里用的OrderBy() 2. `Skip()`指的是跳过多少个, 公式是 (当前页-1)*一页可以显示的总数 3. `Take()`指的是获取多少个数据 一般就是一页显示的个数 ## 子表查询 > 背景:有两个表a和b,想要查询a表中某个字段和b某个字段相同的记录 tip:要查的是a表的记录,b字段是条件 ```C# nzsc_hgq_2021Entities2 a = new nzsc_hgq_2021Entities2(); var b = a.d_it_base_info.Where( o => o.barCode != o.d_it_detect.FirstOrDefault(x => x.barCode == o.barCode).barCode ).ToList(); ``` ##不关联表查询 > 上面子查询是两个表之间存在外键的情况,但是还有一种情况,两个表不关联,改怎么办呢? ``` c# var total =ef.tab1.Select(o=>o).toList();//总数 var used ef.tab2.Select(o=>o).toList();//已经使用的 return total.Where(o => !used.Exists(t => o.总数的字段.Equals(t.已用的字段))).ToList(); //方法1 可行 return markers.Where(a => maps.Where(t => a.latitude == t.lat).Any()).ToList(); // 方法2 没试 return markers.Where(a => !maps.Where(t => a.latitude == t.lat).Any()).ToList(); //取交集数据,加 '!' 没试 ``` ## 坑坑 1. 加载方式 - ef框架好像有好多中加载方式,定义的实体对象好像不会实施更新,所以每次用到的时候我都会直接再new一个实体 标签:学习, c#