版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、如有帮助,欢迎支持。一步一步学Linq to sql(二):DataContext与实体DataContextDataContext 类型(数据上下文) 是命名空间下的重要类型,用于把查询句法翻译成SQL 语句,以及把数据从数据库返回给调用方和把实体的修改写入数据库。DataContext 提供了以下一些使用的功能:以日志形式记录DataContext 生成的 SQL执行 SQL(包括查询和更新语句)创建和删除数据库DataContext 是实体和数据库之间的桥梁,那么首先我们需要定义映射到数据表的实体。定义实体类using Table (Name =Customers)publicclass
2、CustomerColumn (IsPrimaryKey =true )publicstringCustomerID get ;set ;Column (Name =ContactName)publicstringName get ;set ; Column publicstringCity get ;set ;1如有帮助,欢迎支持。以 Northwind 数据库为例,上述Customers 类被映射成一个表,对应数据库中的Customers 表。然后在类型中定义了三个属性,对应表中的三个字段。其中,CustomerID 字段是主键,如果没有指定 Column 特性的 Name 属性,那么系统
3、会把属性名作为数据表的字段名,也就是说实体类的属性名就需要和数据表中的字段名一致。现在,创建一个ASP.NET 页面,然后在页面上加入一个GridView 控件, 使用下面的代码进行绑定数据:usingDataContextctx =new DataContext( server=xxx;database=Northwind;uid=xxx;pwd=xxx);Table Customers = ctx.GetTable();GridView1.DataSource =from cinCustomersA )selectnew 顾客 ID=c.CustomerID,顾客名 =c.Name,城市
4、=c.City;GridView1.DataBind();使用 DataContext 类型把实体类和数据库中的数据进行关联。你可以直接在DataContext的构造方法中定义连接字符串,也可以使用IDbConnection :usingIDbConnectionconn =newSqlConnection( server=xxx;database=Northwind;uid=xxx;pwd=xxx);DataContextctx =new DataContext(conn);之后,通过GetTable 获取表示底层数据表的Table 类型,显然,数据库中的Customers表的实体是Cust
5、omer 类型。随后的查询句法, 即使你不懂SQL 应该也能看明白。 从 Customers表中找出 CustomerID 以 “A”开头的记录,并把CustomersID 、 Name 以及 City 封装成新的匿名类型进行返回。2如有帮助,欢迎支持。结果如下图:强类型 DataContextpublicpartialclassNorthwindDataContext:DataContextpublicTable Customers;publicNorthwindDataContext(IDbConnectionconnection) :base (connection) publicNor
6、thwindDataContext(stringconnection) :base (connection) 强类型数据上下文使代码更简洁:NorthwindDataContextctx =newNorthwindDataContext( server=xxx;database=Northwind;uid=xxx;pwd=xxx);GridView1.DataSource= fromc inctx.CustomersA ) selectnew 顾客 ID = c.CustomerID,顾客名 = c.Name,城市 = c.City ;GridView1.DataBind();DataCont
7、ext 其实封装了很多实用的功能,下面一一介绍。3如有帮助,欢迎支持。日志功能usingSystem.IO;NorthwindDataContextctx =newNorthwindDataContext( server=xxx;database=Northwind;uid=xxx;pwd=xxx);StreamWritersw =new StreamWriter (Server.MapPath(log.txt), true );/ Appendctx.Log = sw;GridView1.DataSource= fromc in ctx.Customerswherec.CustomerID.
8、StartsWith(A ) selectnew 顾客 ID = c.CustomerID,顾客名 = c.Name,城市 = c.City ;GridView1.DataBind();sw.Close();运行程序后在网站所在目录生成了log.txt ,每次查询都会把诸如下面的日志追加到文本文件中:SELECT t0.CustomerID, t0.ContactName, t0.CityFROM Customers AS t0WHERE t0.CustomerID LIKE p0p0: Input String (Size = 2; Prec = 0; Scale = 0) A%应该说这样的
9、日志对于调试程序是非常有帮助的。4如有帮助,欢迎支持。探究查询usingusingNorthwindDataContextctx =newNorthwindDataContext( server=xxx;database=Northwind;uid=xxx;pwd=xxx);varselect= fromc inctx.CustomersA ) selectnew 顾客 ID = c.CustomerID,顾客名 = c.Name,城市 = c.City ;DbCommandcmd = ctx.GetCommand(select);Response.Write(cmd.CommandText
10、+);foreach( DbParameterparmin cmd.Parameters)Response.Write(string.Format( 参数名 :0,参数值 :1, parm.ParameterName,parm.Value);Customercustomer.Name =zhuye;IList queryText = ctx.GetChangeSet().ModifiedEntities;Response.Write(Customer )queryText0).Name);在这里,我们通过DataContext 的 GetCommand 方法获取了查询对应的DbCommand
11、,并且输出了CommandText 和所有的 DbParameter。之后,我们又通过GetChangeSet 方法获取了修改后的实体,并输出了修改内容。5如有帮助,欢迎支持。执行查询NorthwindDataContextctx =newNorthwindDataContext( server=xxx;database=Northwind;uid=xxx;pwd=xxx);string newcity =Shanghai;ctx.ExecuteCommand(updateCustomers set City=0where CustomerID likeA% , newcity);IEnume
12、rable customers = ctx.ExecuteQuery( select * from Customerswhere CustomerID like A%);GridView1.DataSource = customers;GridView1.DataBind();前一篇文章已经说了, 虽然 Linq to sql 能实现 90以上的 TSQL 功能。但是不可否认,对于复杂的查询, 使用 TSQL 能获得更好的效率。 因此,DataContext 类型也提供了执行 SQL 语句的能力。代码的执行结果如下图:创建数据库testContextctx =new testContext(
13、server=xxx;database=testdb;uid=xxx;pwd=xxx);ctx.CreateDatabase(); Table (Name =test)publicclasstest6如有帮助,欢迎支持。Column (IsPrimaryKey =true , IsDbGenerated =true )publicintID get ;set ; Column (DbType= varchar(20)publicstringName get ;set ; publicpartialclasstestContext:DataContextpublicTable test;publ
14、ictestContext(stringconnection) :base (connection) 这段代码在数据库中创建了名为testdb 的数据库,等同于下面的脚本:CREATETABLE dbo. test(ID intIDENTITY( 1, 1 )NOT NULL,Name varchar( 20 )COLLATE Chinese_PRC_CI_ASNULL,CONSTRAINT PK_testPRIMARYKEY CLUSTERED(IDASC) WITH( IGNORE_DUP_KEY=OFF)ON PRIMARY)ON PRIMARY同时, DataContext 还提供了D
15、eleteDatabase()方法,在这里就不列举了。7如有帮助,欢迎支持。使用 DbDataReader 数据源usingvarconn =newSqlConnection ( server=xxx;database=Northwind;uid=xxx;pwd=xxx);varctx =newDataContext (conn);varcmd =new SqlCommand( select * from customers where CustomerID like A%, conn);conn.Open();varreader = cmd.ExecuteReader();GridView1.Dat
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年广西壮族自治区来宾市中考数学考试真题带答案
- 2025年广东云浮市初二地生会考真题试卷(含答案)
- 2025年广东省韶关市初二学业水平地理生物会考考试题库(含答案)
- 后端开发职业进阶指南
- 疫情防控下劳动合同解除与续签指南
- 企业培训服务合同签订技巧
- 2026年劳动合同解除与补偿规定详解
- 2026年商业秘密保密协议模板
- 2026党校学习思想报告(2篇)
- 2026统计工作自查报告范文(2篇)
- 反贿赂管理体系培训课件
- 2026年河南女子职业学院单招综合素质考试题库带答案详解
- 自投光伏电合同范本
- 氯化工艺的工艺流程
- 难治性癌痛护理
- 2024年青海省中考化学真题(原卷版)
- 2025年甘肃省兰州大学经济学院聘用制B岗人员招聘考试笔试参考题库附答案解析
- DB3601∕T 2-2021 居家养老服务设施建设规范
- 航空机票售票培训大纲
- 5年(2021-2025)天津高考数学真题分类汇编:专题02 函数及其性质(解析版)
- 合肥建投笔试题目及答案
评论
0/150
提交评论