博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
EF基本操作增、删、查、改、分页,join……等
阅读量:5300 次
发布时间:2019-06-14

本文共 7051 字,大约阅读时间需要 23 分钟。

一、批量添加数据

1         static void Main(string[] args)  2         {  3             add();  4             add2();  5             Console.ReadKey();  6         }  7   8         static void add()  9         { 10             DemoDbEntities db = new DemoDbEntities(); 11             Stopwatch st = new Stopwatch(); 12             st.Start(); 13             for (int i = 0; i < 1000; i++) 14             { 15                 db.User.Add(new User { NAME = "张三" +i, AGE = i }); 16                 db.SaveChanges(); 17             } 18             st.Stop(); 19             Console.WriteLine("用时:{0}毫秒", st.ElapsedMilliseconds); 20  21  22         } 23  24         static void add2() 25         { 26             DemoDbEntities db = new DemoDbEntities(); 27             Stopwatch st = new Stopwatch(); 28             st.Start(); 29             for (int i = 0; i < 1000; i++) 30             { 31                 db.User.Add(new User { NAME = "张三" + i,AGE=i }); 32  33             } 34             db.SaveChanges(); 35             st.Stop(); 36             Console.WriteLine("用时:{0}毫秒", st.ElapsedMilliseconds); 37  38         }
View Code

通过以上的对比发现,如果每次新增加一个条数据,就用EF SaveChanges 一次,这样会很消耗性能,可以全部标记完了之后,再去调用SaveChanges方法保存数据,这样性能会有所提高。

二、批量删除

1  static void Main(string[] args)  2         {  3             del();  4             Console.ReadKey();  5         }  6   7         #region EF批量删除  8         static void del()  9         { 10             DemoDbEntities db = new DemoDbEntities(); 11  12             List
list = db.User.Where(u => u.NAME == "张三1").ToList(); 13 //Any表示只要集合中有值就返回true 否者返回float 14 if (list != null && list.Any()) 15 { 16 foreach (User item in list) 17 { 18 db.User.Remove(item); 19 } 20 db.SaveChanges(); 21 } 22 Console.WriteLine("删除成功"); 23 } 24 #endregion
View Code

先查询出结果,保证数据库中有值,再删除。

三、EF编辑数据

第一种方式是查询之后在编辑;

第二种方式直接传入一个需要修改的model实体,可以是部分字段

1 static void Main(string[] args)  2         {  3             edit2();  4             Console.ReadKey();  5         }  6         #region EF编辑数据  7         static void edit()  8         {  9             DemoDbEntities db = new DemoDbEntities(); 10  11             var model = db.User.FirstOrDefault(u => u.NAME == "张三3"); 12             model.NAME = "李四"; 13             db.SaveChanges(); 14             Console.WriteLine("编辑成功"); 15         } 16         static void edit2() 17         { 18             DemoDbEntities db = new DemoDbEntities(); 19  20             User model = new User() { 21                 ID=4, 22                 NAME="王五" 23             }; 24             //获取代理对象类的状态为Detaceh 25             System.Data.Entity.Infrastructure.DbEntityEntry entry = db.Entry(model); 26             //1、将代理类的状态修改成 Unchanged 2、将代理类中的需要更新的字段的IsModified修改成true 27             entry.State = System.Data.Entity.EntityState.Unchanged; 28             entry.Property("NAME").IsModified = true; 29             //解决对一个或多个实体验证失败 的方法:关闭EF的实体合法性检查 30             db.Configuration.ValidateOnSaveEnabled = false; 31             db.SaveChanges(); 32             Console.WriteLine("编辑成功"); 33         } 34         #endregion
View Code

四、EF中join的使用方法

1   static void Main(string[] args)  2         {  3             efjoin2();  4             Console.ReadKey();  5         }  6   7         #region  EF连表查询的2种方式  8         static void efjoin()  9         { 10             DemoDbEntities db = new DemoDbEntities(); 11  12             var sql = db.User.Join(db.GroupInfo, u => u.GroupinfoID, g => g.ID, (c, g) => new {uername=c.NAME,g.NAME }); 13  14             var list = sql.ToList(); 15  16             list.ForEach(c => Console.WriteLine(c.uername+""+c.NAME)); 17         } 18         static void efjoin2() 19         { 20             DemoDbEntities db = new DemoDbEntities(); 21  22             db.User.Include("GroupInfo").Where(c => true).ToList().ForEach(c => Console.WriteLine(c.NAME + "" + c.GroupInfo.NAME)); 23  24         } 25         #endregion
View Code

五、 EF分页查询

1        static void Main(string[] args)  2         {  3             fenye();  4             Console.ReadKey();  5         }  6   7         #region EF分页  8         static void fenye()  9         { 10             DemoDbEntities db = new DemoDbEntities(); 11             //在分页前先要是用OrderBy或者OrderByDescending对数据进行正序或者倒序然后在skip()跳过多少条,take()查询多少条。 12             db.User.OrderBy(u => u.ID).Skip(0).Take(5).ToList().ForEach(c=>Console.WriteLine(c.ID)); 13         } 14         #endregion
View Code

六、EF存储过程的调用

1         static void Main(string[] args)  2         {  3             cunchu();  4             Console.ReadKey();  5         }  6   7         #region EF存储过程的使用  8         static void cunchu()  9         { 10             DemoDbEntities db = new DemoDbEntities(); 11             //调用存储过程USP_GetPagedArticleList 12             int count = 0; 13             //由于totalItems是一个输出参数,所以由程序员自己定义 14             ObjectParameter ps = new ObjectParameter("totalItems", count); 15  16             db.USP_GetPagedArticleList(1, 2, ps).ToList().ForEach(u=>Console.WriteLine(u.ID)); 17  18             Console.WriteLine("总行数=" + ps.Value); 19         } 20         #endregion
View Code

七、EF中执行SQL

1        static void Main(string[] args)  2         {  3             EFtoSql();  4             Console.ReadKey();  5         }  6   7         #region EF中执行SQL语句  8         static void EFtoSql()  9         { 10             DemoDbEntities db = new DemoDbEntities(); 11             string sql = "update [DemoDb].[dbo].[User] set NAME=@name where ID>@id"; 12  13             SqlParameter[] p = new SqlParameter[] { 14                 new SqlParameter("@id",5), 15                  new SqlParameter("@name","王五") 16             }; 17             db.Database.ExecuteSqlCommand(sql,p); 18             Console.WriteLine("修改成功"); 19         } 20  21         #endregion
View Code

八 EF提高查询的方法AsNoTracking

1         static void Main(string[] args)  2         {  3             EFAsNoTracking();  4             Console.ReadKey();  5         }  6         #region EF不跟踪查询AsNoTracking()  7         static void EFAsNoTracking()  8         {  9             DemoDbEntities db = new DemoDbEntities(); 10             //使用AsNoTracking()可以提高查询效率,不用在DbContext中进行缓存 11             db.User.AsNoTracking().Where(u => u.ID > 5).ToList().ForEach(c => Console.WriteLine(c.ID)); 12         } 13         #endregion
View Code

九、EF上下文容器中Set<T>泛型方法的使用

1         static void Main(string[] args)  2         {  3             EFSet();  4             Console.ReadKey();  5         }  6   7         #region EF上下文容器中的Set
泛型方法的作用 8 static void EFSet() 9 { 10 DemoDbEntities db = new DemoDbEntities(); 11 //db.Set
相当于db.User 12 db.Set
().Where(u => u.ID > 5).ToList().ForEach(c => Console.WriteLine(c.ID)); 13 } 14 #endregion
View Code

转载于:https://www.cnblogs.com/shiyh/p/8821121.html

你可能感兴趣的文章
正则表达式
查看>>
开源网络漏洞扫描软件
查看>>
yum 命令跳过特定(指定)软件包升级方法
查看>>
创新课程管理系统数据库设计心得
查看>>
Hallo wolrd!
查看>>
16下学期进度条2
查看>>
Could not resolve view with name '***' in servlet with name 'dispatcher'
查看>>
Chapter 3 Phenomenon——12
查看>>
C语言中求最大最小值的库函数
查看>>
和小哥哥一起刷洛谷(1)
查看>>
jquery对id中含有特殊字符的转义处理
查看>>
遇麻烦,Win7+Ubuntu12.10+Archlinux12.10 +grub
查看>>
SqlBulkCopy大批量导入数据
查看>>
pandas 修改指定列中所有内容
查看>>
字符串压缩
查看>>
「 Luogu P2285 」打鼹鼠
查看>>
lua语言入门之Sublime Text设置lua的Build System
查看>>
vue.js基础
查看>>
电脑的自带图标的显示
查看>>
[转载] redis 的两种持久化方式及原理
查看>>