【橙子笔记】EF--详解EF访问SQL数据库增删改查以及Linq查询Lambda查询

作者的话:
很实用的一篇文章,搭建架构的底层代码!全面解析!

EF访问数据库,我给他分为3大类:

  • EF增删改查
  • Linq to EF查询
  • Lambda查询

其中EF增删改查不是延迟加载,会直接加载到内存,对于数据较大时不建议使用
Linq to EF查询,Lambda查询很好的解决了这个问题,属于延迟加载,并且也可以取消延迟加载,Linq to EF查询对于新手非常友好,特别好学!

1.EF增删改查
EF添加:

//1.声明/创建一个上下文对象,DataModelContainer在Model层下,所以添加对其的引用
            DataModelContainer dbContent = new DataModelContainer();
//2.创建一个实体user
            UserInfo user = new UserInfo();
            user.UName = "zs";
			user.Pwd = "123";
            user.ShowName = "张三";
//3.告诉EF上下文要对上面的实体做插入操作
            dbContent.UserInfo.Add(user);
//4.告诉EF上下文把实体的变化保存到数据库里去
            dbContent.SaveChanges();
            Console.ReadKey();

//也可以使用第二种方法,便于和其他方法学习:
//也可以使用第二种方法,便于和其他方法学习:
//也可以使用第二种方法,便于和其他方法学习:


//1.声明/创建一个上下文对象,DataModelContainer在Model层下,所以添加对其的引用
            DataModelContainer dbContent = new DataModelContainer();
            //2.创建一个实体user
            UserInfo user = new UserInfo();
            user.UName = "ls";
user.Pwd = "123456";
            user.ShowName = "李四";
            //3.告诉EF上下文要对上面的实体做插入操作,
            dbContent.UserInfo.Attach(user);//将给定的实体附加到上下文中
            //dbContent.Entry<UserInfo>(user).State = System.Data.EntityState.Added;//EF5.0
            //还要添加对System.Data.Entity.dll的引用
            dbContent.Entry<UserInfo>(user).State = System.Data.Entity.EntityState.Added;//EF6.0
             // 导入System.Data.Entity命名空间,那么前缀可以不写
            //4.告诉EF上下文把实体的变化保存到数据库里去
            dbContent.SaveChanges();
            //注意:运行测试前还要把Model层下的App.Config复制替换EFDemo下的App.Config(因为要知道如何连接数据库)
            Console.WriteLine("ok");
        Console.ReadKey();

EF修改:

  DataModelContainer dbContent = new DataModelContainer();
            UserInfo user = new UserInfo();
            user.Id = 1; 
            //主键必须给出,否则报错
            //主键必须给出,否则报错
            //主键必须给出,否则报错
            user.UName = "ww";
            user.Pwd = "123";
            user.ShowName = "王五";
            //泛型版本写法。这是修改所有字段
            dbContent.Entry<UserInfo>(user).State = System.Data.Entity.EntityState.Modified;
            //非泛型版本写法
            //dbContent.Entry(user).State = System.Data.Entity.EntityState.Modified;
            dbContent.SaveChanges();
            Console.WriteLine("ok");
        Console.ReadKey();

EF删除:

DataModelContainer dbContent = new DataModelContainer();
              UserInfo user = new UserInfo();
            user.Id = 1;
             //主键必须给出,否则报错
            //主键必须给出,否则报错
            //主键必须给出,否则报错
            dbContent.UserInfo.Attach(user);
            dbContent.UserInfo.Remove(user);
            dbContent.SaveChanges();
            Console.WriteLine("ok");
        Console.ReadKey();

//也可以使用第二种方法,便于和其他方法学习:
//也可以使用第二种方法,便于和其他方法学习:
//也可以使用第二种方法,便于和其他方法学习:

DataModelContainer dbContent = new DataModelContainer();
            UserInfo user = new UserInfo();
            user.Id = 2;
            //主键必须给出,否则报错
            //主键必须给出,否则报错
            //主键必须给出,否则报错
            dbContent.Entry<UserInfo>(user).State = System.Data.Entity.EntityState.Deleted;
            dbContent.SaveChanges();
            Console.WriteLine("ok");
        Console.ReadKey();

EF查询:

DataModelContainer dbCotent = new DataModelContainer();
            foreach (var user in dbCotent.UserInfo)
            {
                Console.WriteLine(user.Id+"  "+user.UName);
            }
        Console.ReadKey();

2.Linq to EF查询:

DataModelContainer dbCotent = new DataModelContainer();
            //linq查询是一种高效查询,执行时会先执行where条件过滤出符合条件的数据,而不是先查询出所有数据再过滤,在数据库端就过滤了
            //linq查询返回值是IQuerable<UserInfo>类型,一种接口集合
            //IQueryable<UserInfo > temp = from u in dbCotent.UserInfo 与下面一句等效
            var temp = from u in dbCotent.UserInfo
                       where u.Id > 5
                       select u;
            //因此查询出来的temp就是一个IQueryable集合,里面装的UserInfo类型数据
            foreach (var user in temp)
            {
                Console.WriteLine(user.Id + "  " + user.UName);
            }
            Console.ReadKey();

3.Lambda to EF查询:

  DataModelContainer dbContent = new DataModelContainer();
            //var data = dbContent.UserInfo.Where(u => u.Id > 5);
            //返回值类型也为IQueryable
            IQueryable<UserInfo> data = dbContent.UserInfo.Where(u => u.Id > 5);
            foreach (var user in data)
            {
                Console.WriteLine(user.Id+"  "+user.UName);
            }
        Console.ReadKey();

感谢阅读!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值