EF基本操作增、删、查、改、分页,join……等
一、批量添加数据
static void Main(string[] args)
{
add();
add2();
Console.ReadKey();
} static void add()
{
DemoDbEntities db = new DemoDbEntities();
Stopwatch st = new Stopwatch();
st.Start();
for (int i = 0; i < 1000; i++)
{
db.User.Add(new User { NAME = "张三" +i, AGE = i });
db.SaveChanges();
}
st.Stop();
Console.WriteLine("用时:{0}毫秒", st.ElapsedMilliseconds); } static void add2()
{
DemoDbEntities db = new DemoDbEntities();
Stopwatch st = new Stopwatch();
st.Start();
for (int i = 0; i < 1000; i++)
{
db.User.Add(new User { NAME = "张三" + i,AGE=i }); }
db.SaveChanges();
st.Stop();
Console.WriteLine("用时:{0}毫秒", st.ElapsedMilliseconds); }

通过以上的对比发现,如果每次新增加一个条数据,就用EF SaveChanges 一次,这样会很消耗性能,可以全部标记完了之后,再去调用SaveChanges方法保存数据,这样性能会有所提高。
二、批量删除
static void Main(string[] args)
{
del();
Console.ReadKey();
} #region EF批量删除
static void del()
{
DemoDbEntities db = new DemoDbEntities(); List<User> list = db.User.Where(u => u.NAME == "张三1").ToList();
//Any表示只要集合中有值就返回true 否者返回float
if (list != null && list.Any())
{
foreach (User item in list)
{
db.User.Remove(item);
}
db.SaveChanges();
}
Console.WriteLine("删除成功");
}
#endregion
先查询出结果,保证数据库中有值,再删除。
三、EF编辑数据
第一种方式是查询之后在编辑;
第二种方式直接传入一个需要修改的model实体,可以是部分字段
static void Main(string[] args)
{
edit2();
Console.ReadKey();
}
#region EF编辑数据
static void edit()
{
DemoDbEntities db = new DemoDbEntities(); var model = db.User.FirstOrDefault(u => u.NAME == "张三3");
model.NAME = "李四";
db.SaveChanges();
Console.WriteLine("编辑成功");
}
static void edit2()
{
DemoDbEntities db = new DemoDbEntities(); User model = new User() {
ID=4,
NAME="王五"
};
//获取代理对象类的状态为Detaceh
System.Data.Entity.Infrastructure.DbEntityEntry entry = db.Entry(model);
//1、将代理类的状态修改成 Unchanged 2、将代理类中的需要更新的字段的IsModified修改成true
entry.State = System.Data.Entity.EntityState.Unchanged;
entry.Property("NAME").IsModified = true;
//解决对一个或多个实体验证失败 的方法:关闭EF的实体合法性检查
db.Configuration.ValidateOnSaveEnabled = false;
db.SaveChanges();
Console.WriteLine("编辑成功");
}
#endregion
四、EF中join的使用方法
static void Main(string[] args)
{
efjoin2();
Console.ReadKey();
} #region EF连表查询的2种方式
static void efjoin()
{
DemoDbEntities db = new DemoDbEntities(); var sql = db.User.Join(db.GroupInfo, u => u.GroupinfoID, g => g.ID, (c, g) => new {uername=c.NAME,g.NAME }); var list = sql.ToList(); list.ForEach(c => Console.WriteLine(c.uername+""+c.NAME));
}
static void efjoin2()
{
DemoDbEntities db = new DemoDbEntities(); db.User.Include("GroupInfo").Where(c => true).ToList().ForEach(c => Console.WriteLine(c.NAME + "" + c.GroupInfo.NAME)); }
#endregion
五、 EF分页查询
static void Main(string[] args)
{
fenye();
Console.ReadKey();
} #region EF分页
static void fenye()
{
DemoDbEntities db = new DemoDbEntities();
//在分页前先要是用OrderBy或者OrderByDescending对数据进行正序或者倒序然后在skip()跳过多少条,take()查询多少条。
db.User.OrderBy(u => u.ID).Skip(0).Take(5).ToList().ForEach(c=>Console.WriteLine(c.ID));
}
#endregion
六、EF存储过程的调用
static void Main(string[] args)
{
cunchu();
Console.ReadKey();
} #region EF存储过程的使用
static void cunchu()
{
DemoDbEntities db = new DemoDbEntities();
//调用存储过程USP_GetPagedArticleList
int count = 0;
//由于totalItems是一个输出参数,所以由程序员自己定义
ObjectParameter ps = new ObjectParameter("totalItems", count); db.USP_GetPagedArticleList(1, 2, ps).ToList().ForEach(u=>Console.WriteLine(u.ID)); Console.WriteLine("总行数=" + ps.Value);
}
#endregion
七、EF中执行SQL
static void Main(string[] args)
{
EFtoSql();
Console.ReadKey();
} #region EF中执行SQL语句
static void EFtoSql()
{
DemoDbEntities db = new DemoDbEntities();
string sql = "update [DemoDb].[dbo].[User] set NAME=@name where ID>@id"; SqlParameter[] p = new SqlParameter[] {
new SqlParameter("@id",5),
new SqlParameter("@name","王五")
};
db.Database.ExecuteSqlCommand(sql,p);
Console.WriteLine("修改成功");
} #endregion
八 EF提高查询的方法AsNoTracking
static void Main(string[] args)
{
EFAsNoTracking();
Console.ReadKey();
}
#region EF不跟踪查询AsNoTracking()
static void EFAsNoTracking()
{
DemoDbEntities db = new DemoDbEntities();
//使用AsNoTracking()可以提高查询效率,不用在DbContext中进行缓存
db.User.AsNoTracking().Where(u => u.ID > 5).ToList().ForEach(c => Console.WriteLine(c.ID));
}
#endregion
九、EF上下文容器中Set<T>泛型方法的使用
static void Main(string[] args)
{
EFSet();
Console.ReadKey();
} #region EF上下文容器中的Set<T>泛型方法的作用
static void EFSet()
{
DemoDbEntities db = new DemoDbEntities();
//db.Set<User> 相当于db.User
db.Set<User>().Where(u => u.ID > 5).ToList().ForEach(c => Console.WriteLine(c.ID));
}
#endregion
EF基本操作增、删、查、改、分页,join……等的更多相关文章
- WindowsForm 增 删 查 改
首先是连接数据库 在数据库里写代码 建立一个数据库下面是代码 create database JinXiaoCun go use JinXiaoCun go create table users ( ...
- MongoDB的ObjectId和基本操作增删改查(3)
ObjectId 基本操作增删改查 增: insert 介绍: mongodb存储的是文档,. 文档是json格式的对象. 语法: db.collectionName.insert(document) ...
- 【基础篇】js对本地文件增删改查--改
前置条件: 1. 本地有安装node,点击传送门 项目目录: 1. msg.json内容 { "data": [ { "id": 1, "name&q ...
- SpringBoot JPA实现增删改查、分页、排序、事务操作等功能
今天给大家介绍一下SpringBoot中JPA的一些常用操作,例如:增删改查.分页.排序.事务操作等功能.下面先来介绍一下JPA中一些常用的查询操作: //And --- 等价于 SQL 中的 and ...
- [.NET源码] EF的增删改查
EF的增删改查 创建上下文对象:WordBoradEntities db = new WordBoradEntities(); 一.添加: //1.1创建实体对象 User uObj = new Us ...
- easyui datagrid 禁止选中行 EF的增删改查(转载) C# 获取用户IP地址(转载) MVC EF 执行SQL语句(转载) 在EF中执行SQL语句(转载) EF中使用SQL语句或存储过程 .net MVC使用Session验证用户登录 PowerDesigner 参照完整性约束(转载)
easyui datagrid 禁止选中行 没有找到可以直接禁止的属性,但是找到两个间接禁止的方式. 方式一: //onClickRow: function (rowIndex, rowData) ...
- ASP.NET从零开始学习EF的增删改查
ASP.NET从零开始学习EF的增删改查 最近辞职了,但是离真正的离职还有一段时间,趁着这段空档期,总想着写些东西,想来想去,也不是很明确到底想写个啥,但是闲着也是够 ...
- EF实现增删改查
从来没想到过能在这个上面翻车,感慨自学没有培训来得系统啊,废话不多说 ORM:对象关系映射(Object Relational Mapping,简称ORM,或O/RM,或O/R mapping),是一 ...
- http://www.cnblogs.com/nangong/p/db29669e2c6d72fb3d0da947280aa1ce.htm ASP.NET从零开始学习EF的增删改查
http://www.cnblogs.com/nangong/p/db29669e2c6d72fb3d0da947280aa1ce.htmlASP.NET从零开始学习EF的增删改查
- 用SpringBoot+MySql+JPA实现对数据库的增删改查和分页
使用SpringBoot+Mysql+JPA实现对数据库的增删改查和分页 JPA是Java Persistence API的简称,中文名Java持久层API,是JDK 5.0注解或XML描述 ...
随机推荐
- Java对象表示方式1:序列化、反序列化和transient关键字的作用
平时我们在Java内存中的对象,是无法进行IO操作或者网络通信的,因为在进行IO操作或者网络通信的时候,人家根本不知道内存中的对象是个什么东西,因此必须将对象以某种方式表示出来,即存储对象中的状态.一 ...
- JavaScript函数编程-Ramdajs
在JavaScript语言世界,函数是第一等公民.JavaScript函数是继承自Function的对象,函数能作另一个函数的参数或者返回值使用,这便形成了我们常说的高阶函数(或称函数对象).这就构成 ...
- zendframework 2
我想我的生活需要新的挑战 zf2整个框架里面都应用了namespace,并且他的每个模块,我们都可以根据自己的需要去命名路径,对我来说,zf2的模块化更加的清晰,对于外包来说,或许很方便. 创建他,我 ...
- [MFC] 梳理一个简单的图片处理桌面软件中用到的MFC控件技巧
前言 前些天应好友之拖,帮忙设计一个简单的图像处理的小软件.朋友把核心算法封装好了,但是是用openCV类似于console的编程环境,要我在此基础上改成MFC桌面程序.下图是做成之后的效果: 我是 ...
- 据说每个大牛、小牛都应该有自己的库——DOM处理
这几天整理了一下思路,本来觉得DOM部分会有很多东西,但是忽然发现频繁使用的其实并不太多 class class处理部分主要有四个 hasClass:检查元素是否包含某个class addClass: ...
- AngularJS快速入门指南19:示例代码
本文给出的大部分示例都可以直接运行,通过点击运行按钮来查看结果,同时支持在线编辑代码. <div ng-app=""> <p>Name: <input ...
- Senparc.Weixin.MP SDK 微信公众平台开发教程(十一):高级接口说明
这里所说的高级接口是指面向通过认证的服务号开通的高级功能. 高级功能大致可以分类为: 用户接口 分组接口 客服接口(有别于之前介绍的多客服) 群发接口 多媒体接口 二维码接口 模板消息接口(不是所有账 ...
- js中setTimeout()的使用bug
今天用setTimeout()时,遇到一个奇怪的现象,通过多方面的查询,最终解决了问题,这是setTimeout()设计的时候存在的一点点bug. 代码的作用主要是在三秒后自动关闭本浏览器窗口: 代码 ...
- Atitit 贝叶斯算法的原理以及垃圾邮件分类的原理
Atitit 贝叶斯算法的原理以及垃圾邮件分类的原理 1.1. 最开始的垃圾邮件判断方法,使用contain包含判断,只能一个关键词,而且100%概率判断1 1.2. 元件部件串联定律1 1.3. 垃 ...
- Atitit 订单处理原理与功能设计attilax总结
Atitit 订单处理原理与功能设计attilax总结 订单有三大订单分类,商品订单,充值支付订单,报名订单等..1 订单完成流程 "select * from orderv2 where ...