C# EF增删改查

摘要:
Func是表达式˂Func˃的简化,表达式可以理解为lambda的容器//////分页查询//////要操作的数据类型//其中条件语句//根据什么条件//每页上的数据段更少/要查询页码//,返回一个泛型集合</returns>staticList<T>GetPageList<T<(Func<T,bool>其中Lambda,Func<T,object>orderLambd

1.增

//1.创建一个EF数据上下文对象
MyDBEntities context=new MyDBEntities();
//2.将要添加的数据,封装成对象
 Users user = new Users() {Age = 22, Name = "Kim1"};
//3.将改对象放入EF容器中,默认会为该对象加一个封装类对象(代理类对象)
//用户对对象的操作,实际上是对代理类的操作
 //DbEntityEntry保存着实体状态,当对象被加入时,EF默认为该对象设置State的属性为unchanged
 DbEntityEntry<Users> entityEntry = context.Entry<Users>(user);
 //4.设置对象的标志位Added
 entityEntry.State=EntityState.Added;
  //5.当调用SaveChanges()时,EF会遍历所有的代理类对象,并根据标志生成相应的sql语句
  context.SaveChanges();
 Console.WriteLine("添加成功");

2.删

2.1根据Id(表的主键)删除

MyDBEntities context=new MyDBEntities();
 Users user = new Users() {Id = 8};
//将要删除的对象附加到EF容器中
 context.Users.Attach(user);
  //Remove()起到了标记当前对象为删除状态,可以删除
 context.Users.Remove(user);
  context.SaveChanges();
 Console.WriteLine("删除成功");

2.2根据非主键删除

//1.要删除的条件,这里是要删除name为Kim的项
 string name = "Kim";
//2.获得name为Kim的对象
 var s1 = from s in context.Users
          where s.Name==name
          select s;
//3.如果有多个的话就用foreach()遍历,这里就删除第一个
context.Users.Remove(s1.FirstOrDefault());
//4.保存到数据库
context.SaveChanges();

3.改

//1.获得要更新后的数据,在mvc中的Action方法,可直接获得 更新后的对象
Users u = new Users() { Id = 4, Name = "kim" };
//2.标识为修改
context.Entry<Users>(u).State = EntityState.Modified;
//3.保存到数据库
context.SaveChanges();

3.1批量修改

/// <summary>
/// 批量编辑 数据
/// </summary>
/// <param name="model">要编辑成 的数据</param>
/// <param name="whereLambda">where条件,输入lambda表示式</param>
/// <param name="modefiedProNames">要修改的 属性名</param>
/// <returns>修改的条数</returns>
public int ModefyBy(Model.Users model, Expression<Func<Model.Users, bool>> whereLambda, params string[] modefiedProNames)
{
     //1.查询要修改的数据
       List<Model.Users> listModefing = context.Users.Where(whereLambda).ToList();
      //获取 实体类 类型对象
        Type t = typeof(Model.Users);
       //获取 实体类 所有的 公共属性
        List<PropertyInfo> proInfos = t.GetProperties(BindingFlags.Instance | BindingFlags.Public).ToList();
       //创建 实体属性 字典集合
        Dictionary<string, PropertyInfo> dictPros = new Dictionary<string, PropertyInfo>();
       //将 实体属性 中要修改的属性名 添加到 字典集合中 键:属性名  值:属性对象
        proInfos.ForEach(p =>
       {
           if (modefiedProNames.Contains(p.Name))
           {
                dictPros.Add(p.Name, p);
            }
        });
        //循环 要修改的属性名
          foreach (string proName in modefiedProNames)
         {
            //判断 要修改的属性名是否在 实体类的属性集合中存在
              if (dictPros.ContainsKey(proName))
             {
                 //如果存在,则取出要修改的 属性对象
                     PropertyInfo proInfo = dictPros[proName];
                   //取出 要修改的值
                      object newValue = proInfo.GetValue(model);
                   //批量设置 要修改 对象的 属性
                       foreach (Users user in listModefing)
                    {
                        //为 要修改的对象 的 要修改的属性 设置新的值
                            proInfo.SetValue(user, newValue);
                     }
                 }
             }
           //一次性 生成sql语句到数据库执行
             return context.SaveChanges();
}

4.查

4.1普通查

//查询Name为Kim的全部数据
var s = context.Users.Where(u => u.Name == "Kim").Select(u => u);

 4.2分页查

注意:分页查询的时候,一定要先排序,因为其内部是做了一个row_number()的操作。 
Func<T,bool>是Expression<Func<T,bool>>的缩小,Expression可以理解为就是Lambda的容器

/// <summary>
/// 分页查询
 /// </summary>
/// <typeparam name="T">要操作的数据类型</typeparam>
/// <param name="whereLambda">Where条件语句</param>
/// <param name="orderLambda">按什么条件排序</param>
 /// <param name="pageSize">每页都少条数据</param>
/// <param name="pageIndex">要查询第几页</param>
  /// <returns>返回一个泛型集合</returns>
 static List<T> GetPageList<T>(Func<T, bool> whereLambda, Func<T, object> orderLambda, int pageSize,
  int pageIndex) where T : class
   {
         MyDBEntities context = new MyDBEntities();  
         var list =  context.Set<T>().Where(whereLambda).OrderBy(orderLambda).Skip((pageIndex - 1) * pageSize).Take(pageSize);
         return list.ToList();
 }
一、什么是EF?

   ADO.NETEntity Framework 是微软以 ADO.NET 为基础所发展出来的对象关系对应 (O/R Mapping) 解决方案。ADO.NET Entity Framework 以 Entity DataModel (EDM) 为主,将数据逻  辑层切分为三块,分别为 Conceptual Schema, Mapping Schema 与 Storage Schema 三层,其上还有Entity Client,Object Context 以及 LINQ 可以使用。

EF的运作流程:

                                   C# EF增删改查第1张

二、如何创建EF:

   右击项目——添加——新建项——数据(C#)——选择ADO.NET实体数据模型——点击添加——然后根据实体数据模型向导来一步步的做。

                                                                           C# EF增删改查第2张

三、实现增删改查功能

  方法一

  在DAL层写下增删改查操作的代码
 
   
一、什么是EF?

   ADO.NETEntity Framework 是微软以 ADO.NET 为基础所发展出来的对象关系对应 (O/R Mapping) 解决方案。ADO.NET Entity Framework 以 Entity DataModel (EDM) 为主,将数据逻  辑层切分为三块,分别为 Conceptual Schema, Mapping Schema 与 Storage Schema 三层,其上还有Entity Client,Object Context 以及 LINQ 可以使用。

EF的运作流程:

                                   


二、如何创建EF:

   右击项目——添加——新建项——数据(C#)——选择ADO.NET实体数据模型——点击添加——然后根据实体数据模型向导来一步步的做。

                                                                           
三、实现增删改查功能

  方法一

  在DAL层写下增删改查操作的代码
[csharp] view plain copy
<pre name="code" class="csharp"> //EF查询  
        public userinfo GetUser(string username)  
        {  
            using (MyShopDBEntities1 entity = new MyShopDBEntities1())  
            {  
               userinfo  user = entity.userinfo.SingleOrDefault(model => model.username == username);  
                return user;  
            }  
        }  
          
        //修改  
        public userinfo Update(string username,string userpwd)  
        {  
              
            using (MyShopDBEntities1 entity = new MyShopDBEntities1())  
            {  
               // userinfo user = entity.userinfo.SingleOrDefault(model => model.username == username);  
                userinfo user = entity.userinfo.FirstOrDefault(model => model.username == username);  
                if (user != null)   
                {   user.userpassword=userpwd;  
                    entity.SaveChanges();   
                }  
                  
                return user;   
            }   
             
        }  
  
         
  
        //添加  
        public userinfo Add(userinfo user)  
        {  
            using (MyShopDBEntities1 entity = new MyShopDBEntities1())  
            {  
                entity.userinfo.Add(  
  
                new userinfo()  
                {  
                    username = user.username,  
                    userpwd = user.userpwd  
                });  
                if (entity.SaveChanges() > 0)  
                {  
                    return user;  
                }  
                else  
                    return null;  
            }  
        }  
  
        //删除  
        public void Deleted(string  username)  
        {  
            using (MyShopDBEntities1 entity = new MyShopDBEntities1())  
            {  
                userinfo user = entity.userinfo.FirstOrDefault(m => m.username == username);  
                if (user != null)  
                {  
                   entity.userinfo.Remove(user);  
                }  
  
                if (entity.SaveChanges() > 0)  
                {  
                    //return 0;  
                }  
  
            }  
        }  

 
 方法二:

[csharp] view plain copy
 EF4.0和EF5.0增删改查的写法区别及执行Sql的方法  
  
EF4.0和EF5.0增删改查的写法区别  
public T AddEntity(T entity)   
{  
    //EF4.0的写法    
    添加实体  
    //db.CreateObjectSet<T>().AddObject(entity);  
    //EF5.0的写法  
    db.Entry<T>(entity).State = EntityState.Added;  
    //下面的写法统一  
    db.SaveChanges();  
    return entity;  
}  
public bool UpdateEntity(T entity)  
{  
    //EF4.0的写法  
    //db.CreateObjectSet<T>().Addach(entity);  
    //db.ObjectStateManager.ChangeObjectState(entity, EntityState.Modified);  
    //EF5.0的写法   
   db.Set<T>().Attach(entity);   
   db.Entry<T>(entity).State = EntityState.Modified;   
   return db.SaveChanges() > 0;   
}  
public bool DeleteEntity(T entity)  
{  
    //EF4.0的写法   
   //db.CreateObjectSet<T>().Addach(entity);  
   //db.ObjectStateManager.ChangeObjectState(entity, EntityState.Deleted);  
   //EF5.0的写法  
   db.Set<T>().Attach(entity);  
   db.Entry<T>(entity).State = EntityState.Deleted;  
   return db.SaveChanges() > 0;  
}  
  
public IQueryable<T> LoadEntities(Func<T, bool> whereLambda)  
{  
    //EF4.0的写法  
    //return db.CreateObjectSet<T>().Where<T>(whereLambda).AsQueryable();  
    //EF5.0的写法  
    return db.Set<T>().Where<T>(whereLambda).AsQueryable();  
}  
执行SQL语句  
//EF4.0的写法  
//int ExcuteSql(string strSql, ObjectParameter[] parameters);  
return EFContextFactory.GetCurrentDbContext().ExecuteFunction(strSql, parameters);  
//EF5.0的写法  
 int ExcuteSql(string strSql, DbParameter[] parameters);  
return DEFContextFactory.GetCurrentDbContext().ExecuteSqlCommand(strSql, parameters);  

    注:增删改操作必须使用entity.SaveChanges()进行保存一下。entity.SaveChanges()返回值为数据库里受影响的行数entity.SaveChanges()>0表示操作成功。如entity.SaveChanges()=0则表示操作失败。

 方法二:

一、什么是EF?

   ADO.NETEntity Framework 是微软以 ADO.NET 为基础所发展出来的对象关系对应 (O/R Mapping) 解决方案。ADO.NET Entity Framework 以 Entity DataModel (EDM) 为主,将数据逻  辑层切分为三块,分别为 Conceptual Schema, Mapping Schema 与 Storage Schema 三层,其上还有Entity Client,Object Context 以及 LINQ 可以使用。

EF的运作流程:

                                   


二、如何创建EF:

   右击项目——添加——新建项——数据(C#)——选择ADO.NET实体数据模型——点击添加——然后根据实体数据模型向导来一步步的做。

                                                                           
三、实现增删改查功能

  方法一

  在DAL层写下增删改查操作的代码
[csharp] view plain copy
<pre name="code" class="csharp"> //EF查询  
        public userinfo GetUser(string username)  
        {  
            using (MyShopDBEntities1 entity = new MyShopDBEntities1())  
            {  
               userinfo  user = entity.userinfo.SingleOrDefault(model => model.username == username);  
                return user;  
            }  
        }  
          
        //修改  
        public userinfo Update(string username,string userpwd)  
        {  
              
            using (MyShopDBEntities1 entity = new MyShopDBEntities1())  
            {  
               // userinfo user = entity.userinfo.SingleOrDefault(model => model.username == username);  
                userinfo user = entity.userinfo.FirstOrDefault(model => model.username == username);  
                if (user != null)   
                {   user.userpassword=userpwd;  
                    entity.SaveChanges();   
                }  
                  
                return user;   
            }   
             
        }  
  
         
  
        //添加  
        public userinfo Add(userinfo user)  
        {  
            using (MyShopDBEntities1 entity = new MyShopDBEntities1())  
            {  
                entity.userinfo.Add(  
  
                new userinfo()  
                {  
                    username = user.username,  
                    userpwd = user.userpwd  
                });  
                if (entity.SaveChanges() > 0)  
                {  
                    return user;  
                }  
                else  
                    return null;  
            }  
        }  
  
        //删除  
        public void Deleted(string  username)  
        {  
            using (MyShopDBEntities1 entity = new MyShopDBEntities1())  
            {  
                userinfo user = entity.userinfo.FirstOrDefault(m => m.username == username);  
                if (user != null)  
                {  
                   entity.userinfo.Remove(user);  
                }  
  
                if (entity.SaveChanges() > 0)  
                {  
                    //return 0;  
                }  
  
            }  
        }  

 
 方法二:

[csharp] view plain copy
 EF4.0和EF5.0增删改查的写法区别及执行Sql的方法  
  
EF4.0和EF5.0增删改查的写法区别  
public T AddEntity(T entity)   
{  
    //EF4.0的写法    
    添加实体  
    //db.CreateObjectSet<T>().AddObject(entity);  
    //EF5.0的写法  
    db.Entry<T>(entity).State = EntityState.Added;  
    //下面的写法统一  
    db.SaveChanges();  
    return entity;  
}  
public bool UpdateEntity(T entity)  
{  
    //EF4.0的写法  
    //db.CreateObjectSet<T>().Addach(entity);  
    //db.ObjectStateManager.ChangeObjectState(entity, EntityState.Modified);  
    //EF5.0的写法   
   db.Set<T>().Attach(entity);   
   db.Entry<T>(entity).State = EntityState.Modified;   
   return db.SaveChanges() > 0;   
}  
public bool DeleteEntity(T entity)  
{  
    //EF4.0的写法   
   //db.CreateObjectSet<T>().Addach(entity);  
   //db.ObjectStateManager.ChangeObjectState(entity, EntityState.Deleted);  
   //EF5.0的写法  
   db.Set<T>().Attach(entity);  
   db.Entry<T>(entity).State = EntityState.Deleted;  
   return db.SaveChanges() > 0;  
}  
  
public IQueryable<T> LoadEntities(Func<T, bool> whereLambda)  
{  
    //EF4.0的写法  
    //return db.CreateObjectSet<T>().Where<T>(whereLambda).AsQueryable();  
    //EF5.0的写法  
    return db.Set<T>().Where<T>(whereLambda).AsQueryable();  
}  
执行SQL语句  
//EF4.0的写法  
//int ExcuteSql(string strSql, ObjectParameter[] parameters);  
return EFContextFactory.GetCurrentDbContext().ExecuteFunction(strSql, parameters);  
//EF5.0的写法  
 int ExcuteSql(string strSql, DbParameter[] parameters);  
return DEFContextFactory.GetCurrentDbContext().ExecuteSqlCommand(strSql, parameters);  

    注:增删改操作必须使用entity.SaveChanges()进行保存一下。entity.SaveChanges()返回值为数据库里受影响的行数entity.SaveChanges()>0表示操作成功。如entity.SaveChanges()=0则表示操作失败。

    注:增删改操作必须使用entity.SaveChanges()进行保存一下。entity.SaveChanges()返回值为数据库里受影响的行数entity.SaveChanges()>0表示操作成功。如entity.SaveChanges()=0则表示操作失败。

免责声明:文章转载自《C# EF增删改查》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Vulkan(0)搭建环境-清空窗口Delphi跨进程间消息通讯下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

spring boot jpa

spring boot jpa 访问数据库的方式一般来说有两种,一种以Java Entity为中心,将实体和实体关系对应到数据库的表和表关系,例如Hibernate框架(Spring Data JPA由此实现);另一种以原生SQL为中心,更加灵活便捷,例如Mybatis。这里重点介绍下Spring Data JPA技术。 spring boot jpa介绍...

C# EPL USB 指令打印

private void btnPrinter_Click(object sender, EventArgs e) { #region ESC 热敏图像点阵像素点读取打印 //Bitmap bitmap = new Bitmap(@"D:450X100.bmp");...

【spring boot】捕获全局异常@RestControllerAdvice

一.由来场景:  使用 Java的validation做入参的校验  ,但是这种入参校验在还没有进入controller就会字段校验不通过,从而直接返回异常信息给前端,     前端的异常提醒, 类似于下面这种 很不友好的  后端接口报错提示信息:   二.解决方法1.解决如上问题,需要对异常做捕获处理,Spring boot 提供了@RestContr...

Java String类型数据的字节长度

转载:http://blog.csdn.net/a19881029/article/details/7902701 问题描述: 向Oracle数据库中一varchar2(64)类型字段中插入一条String类型数据,程序使用String.length()来进行数据的长度校 验,如果数据是纯英文,没有问题,但是如果数据中包含中文,校验可以通过,但是在数据入...

把dataset数据转换成json的格式通用方法

/// <summary>        /// 把dataset数据转换成json的格式        /// </summary>        /// <param name="ds">dataset数据集</param>        /// <returns>json格式的字符串<...

guava API整理

1,大纲 让我们来熟悉瓜娃,并体验下它的一些API,分成如下几个部分: Introduction Guava Collection API Guava Basic Utilities IO API Cache API 2,为神马选择瓜娃? 瓜娃是java API蛋糕上的冰激凌(精华) 高效设计良好的API. 被google的开发者设计,实现和使用。...