如何使用LINQ检索和操作数据库.doc_第1页
如何使用LINQ检索和操作数据库.doc_第2页
如何使用LINQ检索和操作数据库.doc_第3页
如何使用LINQ检索和操作数据库.doc_第4页
如何使用LINQ检索和操作数据库.doc_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

如何使用LINQ检索和操作数据库日期:2009年7月10日 作者: 人气: 35 查看:大字体 中字体 小字体 借助于LINQ提供的各种功能和独有的语法结构,LINQ已经被用来作为一种统一的数据库访问技术而被广泛使用,用以消除从数据访问层到数据源层出不穷的区别。通过LINQ检索,我们已经可以不用自己编写一行代码来从数据库获取到数据,LINQ和SQL之间提供了一个直接映射关系,它可以通过我们事先指定的数据库连接自动生成数据库实体类,而我们只需要通过LINQ语句操作这些实体对象就可以非常轻松地从数据库中获取到数据。当然,LINQ所生成的实体对象的功能远远不止这些,它甚至支持数据的更新和存储过程的调用,所有这些都可以通过简单的几行LINQ语句来完成,让我们真正摆脱了编写数据访问层、数据库实体类的工作。下面就让我们来看看LINQ的神奇功能吧!使用LINQ生成数据库实体类Visual Studio 2008集成开发环境为我们提供了很多有用的功能来实现LINQ to SQL。为了让读者可以自行尝试本文所举的示例,读者可能需要在本地安装一个SQL Server数据库实例,Northwind是微软官方提供的一个不错的例子,如果你本地没有安装这个实例,可以去下面这个地址下载:/downloads/details.aspx?FamilyID=06616212-0356-46A0-8DA2-EEBC53A68034&displaylang=en我们在Visual Studio 2008中新建一个控制台应用程序,取名为LINQExample,然后打开Server Explorer窗口并连接到Northwind数据库。如果找不到Server Explorer窗口,可以通过View-Server Explorer菜单打开。在Server Explorer窗口中,右键单击Data Connection节点,选择Add Connection,在弹出的窗口中选择Northwind数据库。在工程中添加Northwind.dbml文件,该文件是LINQ to SQL Classes类型的文件。然后将Server Explorer窗口中Northwind数据库中的所有Table和Stored Procedures拖放到Northwind.dbml视图窗口中。此时,在Northwind.dbml文件中,Visual Sdutio已经自动为我们创建了数据库实体类和映射到数据库存储过程的静态方法,在后面的示例中我们可以通过LINQ语句直接使用它们。打开Class View窗口,在其中也可以看到自动生成的实体类和静态方法。是不是非常方便啊?那接下来就来看看如何通过LINQ检索和修改数据。使用LINQ检索数据LINQ检索提供的语法结构与SQL比较接近,这让我们使用起来更加容易上手。Northwind.dbml自动包装了一个上下文对象NorthwindDataContext类,其中包括了我们在Northwind数据库中要使用的所有实体类和存储过程映射方法,同时还提供了操作表数据的方法,使用时我们不需要去关心它是如何连接数据库并进行底层数据操作的。事实上,Northwind.dbml文件中已经包含了这些基础设施!使用记事本打开Northwind.dbml,可以发现这是一个纯粹的XML结构化文件,里面包含了数据库连接字符串和一些数据库实体类的映射关系,同时,Northwind.designer.cs文件中也做了很多基础性的工作,感兴趣的读者可以自行研究其中的代码,或许对解决实际问题有所帮助。本文在这里不对这个文件的具体结构作详细的解释。下面的这个例子展示了通过LINQ检索Northwind数据库中Customers表City等于London的数据,并在Command窗口中打印出来。1. using(NorthwindDataContextcontext=newNorthwindDataContext() 2. 3. varresults=fromcurstomersincontext.Customers 1. 2. wherecurstomers.City=London 3. orderbycurstomers.CompanyName 4. selectcurstomers; 5. 6. foreach(varcurstomersinresults) 7. 8. Console.WriteLine(Companyis0andContactis1, 9. curstomers.CompanyName,curstomers.ContactName); 10. 11. 12. /Pausetoseetheoutput 13. Console.ReadLine(); 14. 这个是执行结果:使用LINQ更新数据LINQ不仅可以从数据库中检索数据,借助于NorthwindDataContext上下文对象提供的方法,我们也可以通过LINQ非常方便地将数据更新到数据库中。下面的例子展示了将数据Insert和Update到数据库并从数据库中删除数据,其中使用了LINQ中的lambda表达式用于从数据源查询数据(lambda表达式是LINQ查询语句的一种简写形式)。1. using(NorthwindDataContextcontext=newNorthwindDataContext() 2. 3. /AddanewrecordandverifyitexiststhroughCount 4. varcustomer=newCustomer() 1. 2. 3. CompanyName=DramaCafe, 4. CustomerID=DRACA, 5. ContactName=TomSmith, 6. City=BeverlyHills, 7. Address=123MelrosePlace, 8. PostalCode=902109. ; 10. context.Customers.InsertOnSubmit(customer); 11. context.SubmitChanges(); 12. Console.WriteLine(NumberofDRACArecords:0,context.Customers.Where(c=c.CustomerID=DRACA).Count(); 13. 14. /ModifytherecordandverifyitischangedthroughCount 15. customer.ContactName=JoeSmith; 16. context.SubmitChanges(); 17. Console.WriteLine(NumberofJoeSmithrecords:0,context.Customers.Where(c=c.ContactName=JoeSmith).Count(); 18. 19. /DeletearecordandverifyitisremovedthroughCount 20. context.Customers.DeleteOnSubmit(customer); 21. context.SubmitChanges(); 22. Console.WriteLine(NumberofDRACArecords:0,context.Customers.Where(c=c.CustomerID=DRACA).Count(); 23. 24. /Pausetoseetheoutput 25. Console.ReadLine(); 26. 这个是执行结果:使用LINQ执行存储过程在前面我们已经看到,Northwind.dbml在生成数据库实体类的同时,也生成了映射数据库存储过程的静态方法,通过NorthwindDataContext上下文对象我们可以直接在LINQ中调用这些存储过程。下面的例子展示了在LINQ中调用Ten_Expensive_Products存储过程,用于检索Products表中单价最贵的10中商品的名称。1. using(NorthwindDataContextcontext=newNorthwindDataContext() 2. 3. /Usethetenmostexpensiveproductsstoredprocedure 4. varresults=fromproductsincontext.Ten_Most_Expensive_Products() 1. 2. selectproducts; 3. 4. foreach(varproductinresults) 5. 6. Console.WriteLine(Productpriceis0,product.UnitPrice); 7. 8. 9. /Pausetoseetheoutput 10. Console.ReadLine(); 11. 这个是执行结果:LINQ检索结语使用LINQ检索数据库确实可以为我们开发数据库应用程序带来许多的便利性,例如省去编写数据库实体类和数据库访问层的代码,但这同时也会带来一些问题!例如在大型应用项目中这将破坏整体项目的结构,而且难以做到应用层与数据访问层的松耦合结构,另外就是涉及到复杂数据库事务时LINQ往往难以应付,一个好的解决办法就是将事务移至数据库,在存储过程中解决事务问题,然后在数据访问层统一调用存储过程,不过有些非常特殊的应用层需求还是会存在问题。从这个意义上来看,LINQ仍然不可能全部替代传统意义上的数据库访问层,不过

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论