EF之增删改查

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weienjun/article/details/79170819

前言

   前两篇博客为大家解析了EF的框架以及介绍了三种EF搭建方式,那具体EF 如何实现实体与数据库的映射和实现数据持久化呢?本篇博客,小编带大家了解EF的增删改查方式。

  首先了解两个个概念:数据持久化和linq表达式。


数据持久化

   是将内存中的数据模型转换为存储模型,以及将存储模型转换为内存中的数据模型的统称;数据模型可以是任何数据结构或对象模型,存储模型可以是关系模型、XML、二进制流等;其实,简单来说,就是将数据存储到数据库中,为什么这么说呢?因为持久化就不是暂时的,而存储分为暂存和永存两个方面,暂存指的是存储到了计算机的内存中,电源关闭即丢失。而永存就是存储到了类似数据库里,数据就可以反复使用。除此以外,持久化封装了数据访问细节,为大多数业务逻辑提供面向对象的API。

   1. 通过持久化技术可以减少访问数据库数据次数,增加应用程序执行速度;

   2. 代码重用性高,能够完成大部分数据库操作; 

   3. 松散耦合,使持久化不依赖于底层数据库和上层业务逻辑实现,更换数据库时只需修改配置文件而不用修改代码。


Linq表达式

    LINQ的全称是Language Integrated Query,中文译成“语言集成查询”,主要用于查询。举一个简单的例子,比如说sql语句:select userName from t_user where userID = 1;

    那么我们思考一下,这句sql语句可以分为哪几部分,他们各自的执行顺序是什么。当然有select,from,where三层,执行的顺序当然是先from ,再where,在select,所以将上述sql转成linq为:

    from user in DBcontext.t_user where user.userID == 1 select user;

    当然查询有很多,具体请点击linq查询


EF的增删改查

 首先,我们先创建一个上下文对象

using(var db = new Entities())
{
    //数据操作
}

 UserInfo user = new UserInfo()
    {
        UserName = "小王",
        UserPass = "123"
    };
    db.UserInfo.Add(user);

第一种

 user = new UserInfo()
    {
        UserID = 1, //根据主键删除
    };
    db.Entry<UserInfo>(user).State = System.Data.Entity.EntityState.Deleted;
第二种

 user = new UserInfo()
    {
        UserID = 1 //根据主键删除
    };
    //Attach的实体事先不能已经在内存中,否则上下文会追踪到两个相同键名的实体
    db.UserInfo.Attach(user);//将对象添加到EF管理容器中 ObjectStateManager
    db.UserInfo.Remove(user);//将对象包装类状态标识为删除
以上两种适用于根据id可以直接找到要删除的数据,如果数据的找到比较复杂,那么适用第三种,先查询,后删除。查询我们使用linq表达式。

  using (var db = new Entities())
    {
        var user = (from v in db.UserInfo
                    where v.UserID == 1
                    select v).Single();
        db.UserInfo.Remove(user);
        db.SaveChanges();
    }

改也要分为好多种形式,第一种,可以根据ID直接找到就可以直接修改,并且只修改一个属性

user = new UserInfo()
    {
        UserID = 1,
        UserName = "小魏"
    };
    db.UserInfo.Attach(user);
    db.Entry<UserInfo>(user).Property<string>(v => v.UserName).IsModified = true;
第二种,根据ID可以直接找到,但是需要修改很多属性

 user = new UserInfo()
    {
        UserID = 2,
        UserName = "小吴",
        UserPass = "456"
    };
    db.Entry<UserInfo>(user).State = System.Data.Entity.EntityState.Modified;
第三种,先查询再修改

 using (var db = new Entities())
    {
        var user = (from v in db.UserInfo
                    where v.UserName == "小李"
                    select v).Single();
        user.UserPass = "789";
        db.SaveChanges();
    }

展开阅读全文

没有更多推荐了,返回首页