zoukankan      html  css  js  c++  java
  • EF基本操作增、删、查、改、分页,join……等

    一、批量添加数据

      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

    image

    通过以上的对比发现,如果每次新增加一个条数据,就用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<User> 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<T>泛型方法的作用
      8         static void EFSet()
      9         {
     10             DemoDbEntities db = new DemoDbEntities();
     11             //db.Set<User> 相当于db.User
     12             db.Set<User>().Where(u => u.ID > 5).ToList().ForEach(c => Console.WriteLine(c.ID));
     13         }
     14         #endregion
    View Code
  • 相关阅读:
    Ubuntu配置sublime text 3的c编译环境
    ORA-01078错误举例:SID的大写和小写错误
    linux下多进程的文件拷贝与进程相关的一些基础知识
    ASM(四) 利用Method 组件动态注入方法逻辑
    基于Redis的三种分布式爬虫策略
    Go语言并发编程总结
    POJ2406 Power Strings 【KMP】
    nyoj 会场安排问题
    Server Tomcat v7.0 Server at localhost was unable to start within 45 seconds. If the server requires more time, try increasing the timeout in the server editor.
    Java的String、StringBuffer和StringBuilder的区别
  • 原文地址:https://www.cnblogs.com/M-LittleBird/p/5852395.html
Copyright © 2011-2022 走看看