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
  • 相关阅读:
    Sql例子Sp_ExecuteSql 带参数
    Flex显示麦克风当前音量
    无法将 flash.display::Sprite@156b7b1 转换为 mx.core.IUIComponent
    FMS (端口问题)如何穿透防火墙
    19:A*B问题
    6264:走出迷宫
    2753:走迷宫
    1792:迷宫
    换钱问题(经典枚举样例)
    1943(2.1)
  • 原文地址:https://www.cnblogs.com/shiyh/p/8821121.html
Copyright © 2011-2022 走看看