EF – 2.EF数据查询基础(上)查询数据的实用编程技巧
2015-05-20 15:22
113 查看
目录
[b][b]5.4.1 《查询符合条件的单条记录》 时长:8分40秒 难度:易[/b][/b]
EF使用SingleOrDefault()和Find()两个方法查询符合条件的单条记录。
[b][b]5.4.2 《Entity Framework中的内部数据缓存》 时长:11分12秒 难度:中[/b][/b]
DbSet.Local属性所引用的数据集合,缓存了从数据库中提取的数据,同时包容了用户对这些数据所做的修改。本讲视频介绍了访问这一数据缓存的基本编程技巧和注意事项。并且对如何提升数据库应用程序的性能提了一些建议:使用MemCache等第三方缓存系统,直接发送SQL命令到数据库,或者使用ADO.NET绕开EF直接访问数据库。
1.查询数据
2. 执行Local
3.完整的代码示例
这种方法不能滥用。免得与底层数据绑定得过于紧密。
如果比较复杂,建议直接使用ADO.NET。
[b][b]5.4.3 《再谈异步查询》 时长:3分50秒 难度:易[/b][/b]
EF6以上可以使用异步方法,介绍更多的异步查询知识,以帮助大家在实际开发中用好异步查询。
附件中包容本讲源代码及示例数据库MyDb(SQL Server 2012格式,请自行使用SQL Server Management Studio(SSME)附加,注意附加前在资源管理器中为mdf和ldf为“Authenticated User”设置"完全控制“权限,否则,SSME会附加失败)。此示例数据库在后面被一直使用。
5.4.1 查询符合条件的单条记录
EF使用SingleOrDefault()和Find()两个方法查询符合条件的单条记录。
5.4.2 Entity Framework中的内部数据缓存
DbSet.Local属性所引用的数据集合,缓存了从数据库中提取的数据,同时包容了用户对这些数据所做的修改。本讲视频介绍了访问这一数据缓存的基本编程技巧和注意事项。并且对如何提升数据库应用程序的性能提了一些建议:使用MemCache等第三方缓存系统,直接发送SQL命令到数据库,或者使用ADO.NET绕开EF直接访问数据库。
5.4.3 再谈异步查询
介绍一些使用Entity Framework查询数据的实用编程技巧。
EF使用SingleOrDefault()和Find()两个方法查询符合条件的单条记录。
5.4.2 Entity Framework中的内部数据缓存
DbSet.Local属性所引用的数据集合,缓存了从数据库中提取的数据,同时包容了用户对这些数据所做的修改。本讲视频介绍了访问这一数据缓存的基本编程技巧和注意事项。并且对如何提升数据库应用程序的性能提了一些建议:使用MemCache等第三方缓存系统,直接发送SQL命令到数据库,或者使用ADO.NET绕开EF直接访问数据库。
5.4.3 再谈异步查询
介绍一些使用Entity Framework查询数据的实用编程技巧。
[b][b]5.4.1 《查询符合条件的单条记录》 时长:8分40秒 难度:易[/b][/b]
EF使用SingleOrDefault()和Find()两个方法查询符合条件的单条记录。
var client = (from c in context.UPMS_User where c.UserId == 1 select c).SingleOrDefault();
//Find方法会先在内存中找,找不到之后再到数据库提取 //注意:Find方法的参数是主键字段的某个值 var client = context.UPMS_User.Find(2);
[b][b]5.4.2 《Entity Framework中的内部数据缓存》 时长:11分12秒 难度:中[/b][/b]
DbSet.Local属性所引用的数据集合,缓存了从数据库中提取的数据,同时包容了用户对这些数据所做的修改。本讲视频介绍了访问这一数据缓存的基本编程技巧和注意事项。并且对如何提升数据库应用程序的性能提了一些建议:使用MemCache等第三方缓存系统,直接发送SQL命令到数据库,或者使用ADO.NET绕开EF直接访问数据库。
1.查询数据
2. 执行Local
static void UseLocalCache() { using (UPMSEntities dbc = new UPMSEntities()) { var lq = from d in dbc.UPMS_User.Where(p => p.UserId < 10) select d; foreach (var item in lq) { Console.WriteLine(item.UserId + "," + item.RealName); } //访问Local绝对不会向服务器发送SQL Console.WriteLine("共有{0}条记录\n\r",dbc.UPMS_User.Local.Count()); } }
3.完整的代码示例
1 static void UseLocalCache() 2 { 3 using (UPMSEntities dbc = new UPMSEntities()) 4 { 5 var lq = from d in dbc.UPMS_User.Where(p => p.UserId < 10) 6 select d; 7 8 foreach (var item in lq) 9 { 10 Console.WriteLine(item.UserId + "," + item.RealName); 11 } 12 //访问Local绝对不会向服务器发送SQL 13 Console.WriteLine("共有{0}条记录\n\r",dbc.UPMS_User.Local.Count()); 14 15 //针对本地数据的查询,不会访问数据库 16 var c = dbc.UPMS_User.Local.FirstOrDefault(p => p.UserId == 9); 17 Console.WriteLine("\n在本地查找UserId == 9的记录,可找到"); 18 ShowIn(c); 19 20 c = dbc.UPMS_User.Local.FirstOrDefault(p => p.UserId == 11); 21 Console.WriteLine("\n在本地查找UserId == 11的记录,找不到"); 22 ShowIn(c); 23 24 UPMS_User newuser = new UPMS_User(){ 25 UserId = 11, 26 RealName="aaaaaa" 27 }; 28 29 dbc.UPMS_User.Add(newuser); 30 //现在再找就找到了,但数据库中的记录不是这样的 31 c = dbc.UPMS_User.Local.FirstOrDefault(p => p.UserId == 11); 32 Console.WriteLine("\n本地缓存中的数据为:"); 33 ShowIn(c); 34 Console.WriteLine("\n数据中原始数据为:"); 35 36 c = dbc.UPMS_User.SingleOrDefault(p => p.UserId == 11); 37 ShowIn(c); 38 } 39 } 40 41 static void ShowIn(UPMS_User user) 42 { 43 if (user==null) 44 { 45 Console.WriteLine("User为Null"); 46 } 47 else 48 { 49 Console.WriteLine("Userid为:{0},RealName为:{1}...", user.UserId, user.RealName); 50 } 51 52 }
context.Database .ExecuteSqlCommand("delete from Client where ClientID={0}", ClientID);
这种方法不能滥用。免得与底层数据绑定得过于紧密。
如果比较复杂,建议直接使用ADO.NET。
[b][b]5.4.3 《再谈异步查询》 时长:3分50秒 难度:易[/b][/b]
EF6以上可以使用异步方法,介绍更多的异步查询知识,以帮助大家在实际开发中用好异步查询。
附件中包容本讲源代码及示例数据库MyDb(SQL Server 2012格式,请自行使用SQL Server Management Studio(SSME)附加,注意附加前在资源管理器中为mdf和ldf为“Authenticated User”设置"完全控制“权限,否则,SSME会附加失败)。此示例数据库在后面被一直使用。
static async System.Threading.Tasks.Task ShowClientAsync() { using (var context =new UPMSEntities()) { Console.WriteLine("ShowClientAsync():正在提取数据中,,,"); var query = from client in context.UPMS_User select client; var clients = await query.ToListAsync(); Console.WriteLine("\n数据提取完毕,显示如下:"); foreach (var item in clients) { Console.WriteLine("{0},{1}",item.UserId,item.RealName); } Console.WriteLine("\n数据显示完毕,共育{0}条数据:",clients.Count()); } }
相关文章推荐
- sqlite实用技巧:查询表数据时,使用列对齐,显示表头
- MVC实用架构设计(三)——EF-Code First(4):数据查询
- 3S基础知识:MapInfo应用MapX编程实现地图数据查询
- EF – 3.EF数据查询基础(下)数据关联
- HQL数据查询基础
- Java基础(极客)——01、Java编程基础知识入门:变量与数据类型
- Excel 2003 实用基础课程——第5章 排序筛选数据
- 【暑假】[实用数据结构]动态范围查询问题
- php基础之连接mysql数据库和查询数据
- EF直接更新数据的另一种方法(不需查询)
- MySQL查询优化的5个实用技巧
- 服务器端编程心得(六)—— 关于网络编程的一些实用技巧和细节
- HQL数据查询基础(一)
- sql基础--怎样查询单列数据
- 手把手教你数据恢复编程(二)基础知识篇
- 实用技巧:Linux操作系统Vim/Vi编程提速
- springmvc controller 面向切面编程,实现数据查询的缓存功能
- 黑马程序员_Java基础_网络编程_客户端服务端数据传输,交互,客户端请求服务原理,自定义浏览器,URL统一资源定位符
- PHP基础----PHP 与 MySQL----27用户数据查询
- Java基础知识强化之网络编程笔记16:Android网络通信之 使用Http的Get方式读取网络数据(基于HTTP通信技术)