Entity Framework笔记(二)
2015-09-07 21:27
411 查看
前几日学习了在VS2010Console项目中使用Entity Framework,并且使用Code First模式。通过编写Model类,来生成数据库对应的表。并且,往表中写入数据以及获取表中的所有数据。这与实际应用还差很远,还没能够对数据库进行增删查改的全部操作。这一篇,记录EF中怎么进行其他的sql操作。
前一篇中,写了一个SaveUser方法。该方法向数据库中插入一条Users类的实例数据,其中使用的是userDal.user.Add()方法。将光标放到Add方法处,F12导航到该方法所在的类,可以看到这个类的内部。这是会发现,这个类里面已经有很多方法(包括之前用到的Add)。最后一行有一个SqlQuery方法,参数需要的恰巧是sql字符串和参数。
EF中的查询,支持Linq to Sql,以及sql语句的查询。有了SqlQuery这个方法,那操作数据库就没问题了,和传统的Ado.Net的方式没什么区别了,只管构造需要的sql语句好了。下面事例了带参数的查询语句:
同理也可以写删除和修改操作:
接下来,换一种方式。使用Linq to Sql的方式来查询数据(吐槽:跟着微软走,总会有学不完的东西。学MVC扩展出EF,学EF扩展到Linq。虽然这个东西很早之前就出了~~)。下面这个方法采用Linq to Sql 的方式查询表中UserName包含输入串的User信息。其中,第8、9、10行就是Linq的查询方式了。
到此,已经可以使用EF对数据库进行常见的操作了。但是DbSet类下面的那么多方法,还是需要去继续研究。同时,EF不仅仅只有Code First模式(该模式还存在问题,当模型更改后,会将原来的数据库删除,重新建立新的数据库。这在开发过程中是不想碰到的,因为会将前期输入的大量测试数据一同删除)。EF还可以连接到已经存在的数据,将已有的数据库表映射成模型类。(这才是EF作为ORM框架的本质)
待续~~~
前一篇中,写了一个SaveUser方法。该方法向数据库中插入一条Users类的实例数据,其中使用的是userDal.user.Add()方法。将光标放到Add方法处,F12导航到该方法所在的类,可以看到这个类的内部。这是会发现,这个类里面已经有很多方法(包括之前用到的Add)。最后一行有一个SqlQuery方法,参数需要的恰巧是sql字符串和参数。
EF中的查询,支持Linq to Sql,以及sql语句的查询。有了SqlQuery这个方法,那操作数据库就没问题了,和传统的Ado.Net的方式没什么区别了,只管构造需要的sql语句好了。下面事例了带参数的查询语句:
public void FindUser() { UserDal userDal = new UserDal(); Console.WriteLine("Input UserName you want to find"); string userName = Console.ReadLine(); List<Users> users = userDal.users.SqlQuery("select * from T_Users where UserName like '%"+userName+"%'").ToList(); foreach (Users item in users) { Console.WriteLine("UserName: {0}", item.UserName); Console.WriteLine("UserPwd: {0}", item.UserPwd); Console.WriteLine("UserEmail: {0}", item.Email); Console.WriteLine("UserTel: {0}", item.Tel); Console.WriteLine("*****------**********---------********"); } Console.ReadKey(); }
同理也可以写删除和修改操作:
public void DeleteUser() { UserDal userDal = new UserDal(); userDal.users.SqlQuery("delete from T_Users where UserId = {0}", 2); List<Users> users = userDal.users.SqlQuery("select * from T_Users").ToList(); foreach (Users item in users) { Console.WriteLine("UserName: {0}", item.UserName); Console.WriteLine("UserPwd: {0}", item.UserPwd); Console.WriteLine("UserEmail: {0}", item.Email); Console.WriteLine("UserTel: {0}", item.Tel); Console.WriteLine("*****------**********---------********"); } Console.ReadKey(); } public void UpdateUsersById() { UserDal userDal = new UserDal(); userDal.users.SqlQuery("update T_Users set UserName = {1} where UserId = {0}", 2, "yyyyxxxx"); List<Users> users = userDal.users.SqlQuery("select * from T_Users").ToList(); foreach (Users item in users) { Console.WriteLine("UserName: {0}", item.UserName); Console.WriteLine("UserPwd: {0}", item.UserPwd); Console.WriteLine("UserEmail: {0}", item.Email); Console.WriteLine("UserTel: {0}", item.Tel); Console.WriteLine("*****------**********---------********"); } Console.ReadKey(); }
接下来,换一种方式。使用Linq to Sql的方式来查询数据(吐槽:跟着微软走,总会有学不完的东西。学MVC扩展出EF,学EF扩展到Linq。虽然这个东西很早之前就出了~~)。下面这个方法采用Linq to Sql 的方式查询表中UserName包含输入串的User信息。其中,第8、9、10行就是Linq的查询方式了。
public void DisplayUserByName() { string userName = string.Empty; Console.WriteLine("Input UserName:"); userName = Console.ReadLine(); UserDal userDal = new UserDal(); List<Users> users = userDal.users.ToList(); var query = from b in users where b.UserName.Contains(userName) select b; foreach (Users item in query) { Console.WriteLine("UserName: {0}", item.UserName); Console.WriteLine("UserPwd: {0}", item.UserPwd); Console.WriteLine("UserEmail: {0}", item.Email); Console.WriteLine("UserTel: {0}", item.Tel); } }
到此,已经可以使用EF对数据库进行常见的操作了。但是DbSet类下面的那么多方法,还是需要去继续研究。同时,EF不仅仅只有Code First模式(该模式还存在问题,当模型更改后,会将原来的数据库删除,重新建立新的数据库。这在开发过程中是不想碰到的,因为会将前期输入的大量测试数据一同删除)。EF还可以连接到已经存在的数据,将已有的数据库表映射成模型类。(这才是EF作为ORM框架的本质)
待续~~~
相关文章推荐
- 0901~0907面试总结(腾讯CDC、金蝶)
- vim如何配置go语言环境
- Median
- 扑克牌顺子
- hdoj 2188 悼念512汶川大地震遇难同胞——选拔志愿者 【博弈论&&巴什博弈】
- GoogleTest的使用01
- NSURLSession 做文件上传
- HDU 3376 费用流 Matrix Again
- Scala 深入浅出实战经典 第78讲:Type与Class实战详解
- 通过Intent将数据传递给上一个活动
- hdu2516
- 【bzoj1309】【HAOI2006】【受欢迎的牛】【强连通分量缩点】
- R语言包_googleVis
- House Robber
- LintCode-最长无重复字符的子串
- DevExpress之ChartControl实现时间轴实例 z
- 云计算技术的产生、概念、原理、应用和前景
- 构造函数、原型对象、实例的关系与区别
- StringBuffer
- 超级有用PHP代码样例