强类型DataContext
public partial class NorthwindDataContext : DataContext {
public Table
public NorthwindDataContext(IDbConnection connection) : base(connection) { } public NorthwindDataContext(string connection) : base(connection) { } }
强类型数据上下文使代码更简洁:
NorthwindDataContext ctx = new NorthwindDataContext(\ GridView1.DataSource = from c in ctx.Customers where c.CustomerID.StartsWith(\顾客ID = c.CustomerID, 顾客名 = c.Name, 城市 = c.City }; GridView1.DataBind();
DataContext其实封装了很多实用的功能,下面一一介绍。
日志功能
using System.IO;
NorthwindDataContext ctx = new NorthwindDataContext(\ StreamWriter sw = new StreamWriter(Server.MapPath(\ ctx.Log = sw;
GridView1.DataSource = from c in ctx.Customers where c.CustomerID.StartsWith(\顾客ID = c.CustomerID, 顾客名 = c.Name, 城市 = c.City }; GridView1.DataBind(); sw.Close();
运行程序后在网站所在目录生成了log.txt,每次查询都会把诸如下面的日志追加到文本文件中:
SELECT [t0].[CustomerID], [t0].[ContactName], [t0].[City] FROM [Customers] AS [t0]
WHERE [t0].[CustomerID] LIKE @p0
-- @p0: Input String (Size = 2; Prec = 0; Scale = 0) [A%]
-- Context: SqlProvider(Sql2005) Model: AttributedMetaModel Build: 3.5.20706.1 应该说这样的日志对于调试程序是非常有帮助的。
探究查询
using System.Data.Common;
using System.Collections.Generic;
NorthwindDataContext ctx = new NorthwindDataContext(\ var select = from c in ctx.Customers where c.CustomerID.StartsWith(\顾客ID = c.CustomerID, 顾客名 = c.Name, 城市 = c.City }; DbCommand cmd = ctx.GetCommand(select); Response.Write(cmd.CommandText + \ foreach (DbParameter parm in cmd.Parameters)
Response.Write(string.Format(\参数名:{0},参数值:{1}
\ Customer customer = ctx.Customers.First(); customer.Name = \
IList
在这里,我们通过DataContext的GetCommand方法获取了查询对应的DbCommand,并且输出了CommandText和所有的DbParameter。之后,我们又通过GetChangeSet方法获取了修改后的实体,并输出了修改内容。
执行查询
orthwindDataContext ctx = new NorthwindDataContext(\ ring newcity = \
x.ExecuteCommand(\
Enumerable
前一篇文章已经说了,虽然Linq to sql能实现90%以上的TSQL功能。但是不可否认,对于复杂的查询,使用TSQL能获得更好的效率。因此,DataContext类型也提供了执行SQL语句的能力。代码的执行结果如下图:
创建数据库 testContext ctx = new testContext(\ ctx.CreateDatabase(); [Table(Name = \ public class test { [Column(IsPrimaryKey = true, IsDbGenerated = true)] public int ID { get; set; } [Column(DbType=\ public string Name { get; set; } } public partial class testContext : DataContext { public Table
CREATE TABLE [dbo].[test](
[ID] [int] IDENTITY(1,1) NOT NULL,
[Name] [varchar](20) COLLATE Chinese_PRC_CI_AS NULL, CONSTRAINT [PK_test] PRIMARY KEY CLUSTERED (
[ID] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY] ) ON [PRIMARY]
同时,DataContext还提供了DeleteDatabase()方法,在这里就不列举了。
使用DbDataReader数据源
using System.Data.SqlClient;
var conn = new SqlConnection(\ var ctx = new DataContext(conn);
var cmd = new SqlCommand(\ conn.Open();
var reader = cmd.ExecuteReader();
GridView1.DataSource = ctx.Translate
你同样可以选择使用DataReader获取数据,增加了灵活性的同时也增加了性能。
看到这里,你可能会觉得手工定义和数据库中表对应的实体类很麻烦,不用担心,VS2008提供了自动生成实体类以及关系的工具,工具的使用将在以后讲解。今
天就讲到这里,和DataContext相关的事务、加载选项、并发选项以及关系实体等高级内容也将在以后讲解。
一步一步学Linq to sql(三):增删改
2007-10-20 00:00 作者: lovecherry 出处: 天极网 责任编辑:>dizzarz 示例数据库 字段名 字段类型 允许空 字段说明 ID uniqueidentifier 表主键字段 UserName varchar(50) 留言用户名 PostTime datetime 留言时间 Message varchar(400) √ 留言内容 IsReplied bit 留言是否回复 Reply varchar(400) √ 留言管理员回复 在数据库中创建一个名为GuestBook的数据库,在里面创建一个tbGuestBook的表,结构如上表。
生成实体类
右键点击网站项目,选择添加新项,然后选择“Linq to sql Classes”,命名为GuestBook。然后打开App_Code里面的GuestBook.dbml。设计视图上的文字提示你可以从服务器资源管理器或者攻击箱拖动项到设计界面上来创建实体类。 那么,我们就在服务器资源管理器中创建一个指向GuestBook数据库的数据连接,然后把tbGuestBook表拖动到GuestBook.dbml的设计视图上,按CTRL+S保存。打开GuestBook.designer.cs可以发现系统自动创建了GuestBook数据库中tbGuestBook表的映射,如下图: