VS2010+SQlite+EF 四、常用操作
来源:互联网 发布:仿mac桌面软件 编辑:程序博客网 时间:2024/05/17 02:42
经过前面三篇文章的介绍,可能有人觉得EF好像很复杂,其实EF的使用非常简单,下面就说说常见的增删改查
一、查询
EF的查询常用的方法有2种,Lamda和Linq,我个人比较习惯Linq,语法风格和SQL非常类似,例如
using (TestDatabaseEntities testDatabase = new TestDatabaseEntities()) { var selectedShops = from shop in testDatabase.Shops where shop.ID > 10 orderby shop.ID ascending select shop; List<Shops> shopList = selectedShops.ToList(); dataGridView1.DataSource = shopList; }补充一点,List是可以直接作为DataGridView的数据源的,.NET的数据感知技术真是强大
二、插入
using (TestDatabaseEntities testDatabase = new TestDatabaseEntities()) { Goods good1 = new Goods(); good1.ShopID = 11; good1.Name = "菊花茶"; good1.Price = 5.0f; good1.Desc = "一种清凉的饮料"; testDatabase.Goods.AddObject(good1); testDatabase.SaveChanges(); }插入数据的时候,所有未赋值的字段都会默认为NULL,SQlite的主键列一定要记得设置自增这个选项,这个选项默认是不会开启的,即使你设置为主键。我就是因为忘记设置自增,插入数据一直报错,因为ID值重复了
三、修改
我们先写一个根据主键值得到对象的方法
private Shops GetShop(TestDatabaseEntities testDatabase, long id) { Shops returnShop = null; var selectedShop = from shop in testDatabase.Shops where shop.ID == id select shop; List<Shops> tl = selectedShop.ToList(); returnShop = tl[0]; return returnShop; }这个方法为什么要传一个TestDatabaseEntities的对象呢,因为C#的对象是引用类型,传入TestDatabaseEntities是为了确保查询得到的对象是属于TestDatabaseEntities的,如果我们用2个不同的TestDatabaseEntities对象去查询,即使得到的Shop对象里面的值完全一样,也是2个不同的对象,后续的修改和删除操作都是基于对象的,就会报错。
long id = 2; using (TestDatabaseEntities testDatabase = new TestDatabaseEntities()) { Shops selectedShop = GetShop(testDatabase, id); if (selectedShop != null) { selectedShop.Address = "皇后大道东"; testDatabase.SaveChanges(); } }四、删除
还是要用到上面的查询方法得到对象,然后删除
long id = 2; using (TestDatabaseEntities testDatabase = new TestDatabaseEntities()) { Shops selectedShop = GetShop(testDatabase, id); if (selectedShop != null) { testDatabase.Shops.DeleteObject(selectedShop); testDatabase.SaveChanges(); } }
五、分页查询
分页查询要用到2个Linq语法
Skip(n):在结果集中跳过前面n条记录
Take(n):取结果集中的n条记录
private List<Shops> GetShopsPage(int pageIndex, int pageSize) { List<Shops> tList = null; using (TestDatabaseEntities testDatabase = new TestDatabaseEntities()) { var selectedRecords = from a in testDatabase.Shops orderby a.ID ascending select a; var selectedPage = selectedRecords.Skip((pageIndex - 1) * pageSize).Take(pageSize); tList = selectedPage.ToList(); } return tList; }
Linq语法只会在真正取数据的时候才会解释并执行,所以上面的代码并不会先从数据库将所有数据查询出来,然后再来查询子集。所以Linq在查询大量数据的时候,执行效率和原生SQL没什么区别
六、执行SQL语句
using (TestDatabaseEntities testDatabase = new TestDatabaseEntities()) { string strSql = "update Shops set Address='忠孝东路' where ID=3"; int i = testDatabase.ExecuteStoreCommand(strSql, null); if (i > 0) { MessageBox.Show("执行成功"); } else { MessageBox.Show("执行失败"); } }ExecuteStoreCommand相当于ADO.NET的ExecuteNoneQuery
七、修改数据库结构
无论什么项目,即使前期考虑的再周全,开发过程中仍免不了会出现数据库结构变更的情况,这时候EF的强大就体现出来了。
当数据库结构变化之后,比如新增了字段,新增了表,我们只需要在解决方案管理器中双击edmx文件,来到可视化界面,在空白处右键全选,删除,将原来的全部删掉。
然后,在空白处右键,选择“从数据库更新模型”,所有数据访问层的代码就重新自动生成了,就是这么简单
总结:
EF是与VS结合的最好的ORM框架,简单易用,尤其适合中小型项目的快速开发。
如果一定要挑一点缺点的话,就是对于复杂一点的数据库操作,还是要加一些代码的,比如分页查询,多表查询等
练习程序地址:http://pan.baidu.com/s/1hsmOQvq
0 0
- VS2010+SQlite+EF 四、常用操作
- VS2010+SQlite+EF 二、初识EF DataBaseFirst
- VS2010+SQlite+EF 一、环境搭建
- VS2010+SQlite+EF 踩过的坑
- VS2010+SQlite+EF 三、再深入一点
- VS2010 EF
- Android sqlite常用操作
- SQLite常用基本操作
- sqlite常用操作
- sqlite命令行常用操作
- SQLite数据库常用操作
- VS2010使用EntityFramework操作Sqlite数据库
- sqlite操作总结(四)
- EF + Oracle + Sqlite 折腾
- Android Sqlite数据库常用操作
- 应用EF访问SQLite数据
- SQLite进阶:Android上的SQLite常用操作
- 【SQLite】常用操作SQL及压缩SQLite的实例代码
- 三栏布局(两边固定,中间自适应)
- poj_1089Intervals
- 算法&大数据--(1)求交集
- 细胞
- 类的包访问权限:《Java编程思想》中一段话的困惑
- VS2010+SQlite+EF 四、常用操作
- express4 router用法详解
- 通过Scanner从控制台获取数据
- 一起来聊聊虚拟红包的技术实现
- 人脸识别之特征脸识别方法EigenFace
- 浅谈Java中的对象和引用
- 优化集合在开发中的使用
- csapp第六章 存储器 对缓存的思考【续】——编写高速缓存友好代码
- 迷雾中的一束光