ITjob NET视频教程之C教材linqtosql_第1页
ITjob NET视频教程之C教材linqtosql_第2页
ITjob NET视频教程之C教材linqtosql_第3页
ITjob NET视频教程之C教材linqtosql_第4页
ITjob NET视频教程之C教材linqtosql_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

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

文档简介

LINQToSQL本课内容使用LINQtoSQL和VisualStudio2021LINQtoSQL对象如何映射到数据库实体上建立LINQtoSQL操作,但不使用O/R设计器用LINQ查询SQLServer数据库存储过程和LINQtoSQL演示利用设计器建立LINQtoSQL类:1、建立一个DOS控制台2、建立一个LINQtoSQL类3、通过O/R设计器创立Northwind的Products这样我们就创立了一个强类型的ORM数据库的对象与集合,下面我们就可以采用如下的方法输出内容:NorthwindDataContextdc=newNorthwindDataContext();varquery=dc.Products;foreach(Productsiteminquery){Console.WriteLine("{0}|{1}|{2}",item.ProductID,item.ProductName,item.UnitsInStock);}使用LINQtoSQL和VisualStudio2021以下图演示了数据库对象与LINQ对象之间的ORM关系:对象映射到LINQ对象上数据库对象LINQ对象数据库DataContext表类和集合视图类和集合列属性关系嵌套的集合存储过程方法 DataContext类型〔数据上下文〕是命名空间下的重要类型,用于把查询句法翻译成SQL语句,以及把数据从数据库返回给调用方和把实体的修改写入数据库。 DataContext提供了以下一些使用的功能:以日志形式记录DataContext生成的SQL执行SQL〔包括查询和更新语句〕创立和删除数据库DataContext是实体和数据库之间的桥梁,那么首先我们需要定义映射到数据表的实体。对象映射到LINQ对象上-DataContext对象以Northwind数据库为例,上述Customers类被映射成一个表,对应数据库中的Customers表。然后在类型中定义了三个属性,对应表中的三个字段。其中,CustomerID字段是主键,如果没有指定Column特性的Name属性,那么系统会把属性名作为数据表的字段名,也就是说实体类的属性名就需要和数据表中的字段名一致。备注:对象映射到LINQ对象上-DataContext对象创立一个ASP.NET页面,然后在页面上参加一个GridView控件,使用下面的代码进行绑定数据:引用命名空间using;

DataContextctx=newDataContext("server=xxx;database=Northwind;uid=xxx;pwd=xxx");Table<Customer>Customers=ctx.GetTable<Customer>();GridView1.DataSource=fromcinCustomerswherec.CustomerID.StartsWith("A")selectnew{顾客ID=c.CustomerID,顾客名=c.Name,城市=c.City};GridView1.DataBind();对象映射到LINQ对象上-DataContext对象强类型DataContextpublicpartialclassNorthwindDataContext:DataContext{publicTable<Customer>Customers;publicNorthwindDataContext(IDbConnectionconnection):base(connection){}publicNorthwindDataContext(stringconnection):base(connection){}}对象映射到LINQ对象上-DataContext对象强类型数据上下文使代码更简洁:NorthwindDataContextctx=newNorthwindDataContext("server=xxx;database=Northwind;uid=xxx;pwd=xxx");GridView1.DataSource=fromcinctx.Customerswherec.CustomerID.StartsWith("A")selectnew{顾客ID=c.CustomerID,顾客名=c.Name,城市=c.City};GridView1.DataBind();

对象映射到LINQ对象上-DataContext对象DataContext其实封装了很多实用的功能,下面一一介绍。日志功能探究查询执行查询对象映射到LINQ对象上-DataContext对象1、使用ExecuteQuery方法NorthwindDataContextdc=newNorthwindDataContext();IEnumerable<Products>myProducts=dc.ExecuteQuery<Products>("SELECT*FROMPRODUCTS","");foreach(ProductsiteminmyProducts){Console.WriteLine(item.ProductID+"|"+item.ProductName);}对象映射到LINQ对象上-DataContext对象2、使用Connection属性使用Connection属性可以返回一个DBConnection实例:Console.WriteLine(dc.Connection.ConnectionString);对象映射到LINQ对象上-DataContext对象3、使用Transaction属性Table<T>提供了InsertOnSubmit插入一个对象通过DataContext的SubmitChanges方法提交整个事务回滚那么是一个自动的行为注意:InsertOnSubmit是一个带有事务处理的插入方式。见备注中的代码对象映射到LINQ对象上-DataContext对象4、DataContext对象的其他方法如下:对象映射到LINQ对象上-DataContext对象方法说明CreateDatabase可以在服务器上创建数据库DatabaseExists可以确定数据库是否存在,是否可以打开DeleteDatabase删除相关的数据库ExecuteCommand可以给数据库传送要执行的命令ExecuteQuery可以给数据库传送查询GetChangeSetDataContext对象跟踪数据库中发生的变化,这个命令可以访问这些变化GetCommand可以访问要执行的命令GetTable可以访问数据库中表集合Refresh可以利用数据库中存储的数据刷新对象SubmitChanges在数据库上执行代码建立的GRUD命令Translate把IDataReader转换为对象4、DataContext对象的其他属性如下:对象映射到LINQ对象上-DataContext对象方法说明ChangeConflicts调用SubmitChanges()方法时,提供一个导致并发冲突的对象集合CommandTimeout可以设置一个超时时间,命令允许在这个时间段内在数据库上执行。如果查询需要执行较长时间,就应把这个属性设置为较高的值Connection可以处理客户使用的System.Data.SqlClient.SqlConnection对象DeferredLoadingEnabled可以指定是否延迟加载一对多或一对一关系LoadOptions可以指定或检索DataLoadOptions对象的值Log可以指定在查询中使用的命令的输出位置Mapping提供映射所基于的MetaModelObjectTrackingEnabled指定是否跟踪数据库中对象的变化,以进行事务处理。如果处理只读数据库,就应把这个属性设置为falseTransaction可以指定是否跟踪数据库中使用的本地事务处理Table<TEntity>的一些方法如下:对象映射到LINQ对象上-Table<TEntity>对象方法说明Attach可以把一个实体关联到DAtaContext实例上AttachAll可以把一个实体集合关联到DataContext实例上DeleteAllOnSubmit<TSubEntity>可以把所有未决的操作置于准备删除的状态。从DataContext对象上调用SubmitChanges()方法时,就执行所有的操作DeleteOnSubmit可以把一个未决的操作置于准备删除的状态。从DataContext对象上调用SubmitChanges()方法时,就执行所有的操作GetModifiedMembers提供一组已修改的对象,可以访问它们的当前值和改变后的值GetNewBindingList提供一个新列表,以绑定到数据存储上GetOriginalEntityState提供一个对象的实例,并且显示其初始状态InsertAllOnSubmit<TSubEntity>可以把一个未决的操作置于准备插入的状态。从DataContext对象上调用SubmitChanges()方法时,就执行所有的操作InsertOnSubmit可以把一个未决的操作置于准备插入的状态。从DataContext对象上调用SubmitChanges()方法时,就执行所有的操作见备注中的代码:用Table属性描述表名,用Column属性描述列名一般列名和表名要一一对应,否那么要采用Name传入参数不使用O/R设计器工作1、使用查询表达式:varquery=frompindc.Productsselectp;foreach(Productsiteminquery){ Console.WriteLine(ductID);}查询数据库2、其它的查询表达式见下表:查询数据库选项语法Projectselect<expression>Filterwhere<expression>,distinctTestany(<expression>),all(<expression>)Join<expression>join<expression>on<expression>equals<expression>Groupgroupby<expression>,into<expression>,<expression>groupjoin<decision>on<expression>equals<expression>into<expression>AggregateCount([<expression>]),sum(<expression>),min(<expression>),max(<expression>),avg(<expression>)PatitionSkip[while]<expression>,take[while]<expression>SetUnion,intersect,exceptOrderOrderby<expression>,<expression>[ascending|descending]3、使用表达式过滤:NorthwindDataContextdc=newNorthwindDataContext();varquery=frompindc.Productswherep.ProductName.StartsWith("L")wherep.ProductName.EndsWith("i")selectp;foreach(Productsiteminquery)Console.WriteLine(item.ProductName);查询数据库4、连接:NorthwindDataContextdc=newNorthwindDataContext();varquery=fromcindc.Customersjoinoindc.Ordersonc.CustomerIDequalso.CustomerIDorderbyc.CustomerIDselectnew{c.CustomerID,c.CompanyName,c.Country,o.OrderID,o.OrderDate};foreach(variteminquery){Console.WriteLine(item.CustomerID+"|"+item.CompanyName+"|"+item.Country+"|"+item.OrderID+"|"+item.OrderDate);}查询数据库5、组合数据项:NorthwindDataContextdc=newNorthwindDataContext();varquery=frompindc.Productsorderbyp.Category.CategoryNameascendinggrouppbyp.Category.CategoryNameintogselectnew{Category=g.Key,Products=g};foreach(variteminquery){Console.WriteLine(item.Category);foreach(varinnerIteminitem.Products){Conso

温馨提示

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

评论

0/150

提交评论