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描述 ...
随机推荐
- .Net Core CLI–Ubuntu 14安装
sudo sh -c 'echo "deb [arch=amd64] http://apt-mo.trafficmanager.net/repos/dotnet/ trusty main&q ...
- Java多线程系列--“JUC锁”08之 共享锁和ReentrantReadWriteLock
概要 Java的JUC(java.util.concurrent)包中的锁包括"独占锁"和"共享锁".在“Java多线程系列--“JUC锁”02之 互斥锁Ree ...
- Unity3D骨骼动画的分解(CleanData.Ani详解)
CleanData是什么 CleanData以前没有特定的名字,(在easydown这个开源项目中,作为一个GameObjParser模块存在).在某三国项目中,我们使用GameObjParser将N ...
- 每天一个linux命令(55):traceroute命令
通过traceroute我们可以知道信息从你的计算机到互联网另一端的主机是走的什么路径.当然每次数据包由某一同样的出发点(source)到达某一同样的目的地(destination)走的路径可能会不 ...
- 更新日志 - fir.im Jenkins & Gradle 插件上线
最近 fir.im 工程师们效率爆表,fir.im 实用工具集合又添加了新的成员-- Jenkins & Gradle 插件,让 App 打包上传更加简单快速. fir.im Jenkins ...
- 每天一个linux命令(13):less 命令
less 工具也是对文件或其它输出进行分页显示的工具,应该说是linux正统查看文件内容的工具,功能极其强大.less 的用法比起 more 更加的有弹性.在 more 的时候,我们并没有办法向前面翻 ...
- C#与JS实现 获取指定字节长度 中英文混合字符串 的方法
平时在作数据库插入操作时,如果用 INSERT 语句向一个varchar型字段插入内容时,有时会因为插入的内容长度超出规定的长度而报错. 尤其是插入中英文混合字符串时,SQL Server中一般中文要 ...
- easyuidatagrid中load,reload,loadData的区别。
摘要:datagrid中有load,reload,loadData那三个方式,皆是加载数据的,但又有差别.下面让我们一起来看看: 首先,load方法,比如我已经定义一个datagrid的id为grid ...
- java容器详细解析
前言:在java开发中我们肯定会大量的使用集合,在这里我将总结常见的集合类,每个集合类的优点和缺点,以便我们能更好的使用集合.下面我用一幅图来表示 其中淡绿色的表示接口,红色的表示我们经常使用的类. ...
- SQL Server中关于跟踪(Trace)那点事
前言 一提到跟踪俩字,很多人想到警匪片中的场景,同样在我们的SQL Server数据库中“跟踪”也是无处不在的,如果我们利用好了跟踪技巧,就可以针对某些特定的场景做定向分析,找出充足的证据来破案. 简 ...