您的位置:首页 > 数据库

【十天学会Linq to sql】第二天—–数据上下文

2013-06-09 22:43 267 查看
目录

【十天学会Linq to sql】第一天—–基础知识

【十天学会Linq to sql】第二天—–数据上下文

【十天学会Linq to sql】第三天—–数据查询

【十天学会Linq to sql】第四天—–数据更新

【十天学会Linq to sql】第六天——存储过程

DataContext ==数据上下文
DataContext类型(数据上下文)是System.Data.Linq命名空间下的重要类型,用于把查询句法翻译成SQL语句,以及把数据从数据库返回给调用方和把实体的修改写入数据库。
DataContext提供了以下一些使用的功能:
l 以日志形式记录DataContext生成的SQL
l 执行SQL(包括查询和更新语句)
l 创建和删除数据库
DataContext是实体和数据库之间的桥梁,那么首先我们需要定义映射到数据表的实体。
------------这部分内容在百度百科和msdn上面都有解释,新手可以暂时性忽略掉;
定义实体类
不管是什么架构,都离不开实体类的构建,如果单纯试用SQL查询,返回的数据处理可以把我们活活累死;

【复制博客园(LoveCherry)的部分内容】
using System.Data.Linq.Mapping;
 
[Table(Name = "Customers")]
public class Customer
{
    [Column(IsPrimaryKey = true)]
    public string CustomerID {get; set;}
    [Column(Name = "ContactName")]
    public string Name { get; set; }
    [Column]
    public string City {get; set;}
}
以Northwind数据库为例,上述Customers类被映射成一个表,对应数据库中的 Customers表。然后在类型中定义了三个属性,对应表中的三个字段。其中,CustomerID字段是主键,如果没有指定Column特性的Name属性,那么系统会把属性名作为数据表的字段名,也就是说实体类的属性名就需要和数据表中的字段名一致。
现在,创建一个ASP.NET页面,然后在页面上加入一个GridView控件,使用下面的代码进行绑定数据:
using System.Data.Linq;
 
DataContext ctx = new DataContext("server=xxx;database=Northwind;uid=xxx;pwd=xxx");
Table<Customer> Customers = ctx.GetTable<Customer>();
GridView1.DataSource = from c in Customers where c.CustomerID.StartsWith("A") select new {顾客ID=c.CustomerID, 顾客名=c.Name, 城市=c.City};
GridView1.DataBind();
使用DataContext类型把实体类和数据库中的数据进行关联。你可以直接在DataContext的构造方法中定义连接字符串,也可以使用IDbConnection:
using System.Data.SqlClient;
 
IDbConnection conn = new SqlConnection("server=xxx;database=Northwind;uid=xxx;pwd=xxx");
DataContext ctx = new DataContext(conn);
之后,通过GetTable获取表示底层数据表的Table类型,显然,数据库中的Customers表的实体是Customer类型。随后的查询句法,即使你不懂SQL应该也能看明白。从Customers表中找出CustomerID以“A”开头的记录,并把CustomersID、Name以及City封装成新的匿名类型进行返回。
结果如下图:




强类型DataContext
public partial class NorthwindDataContext : DataContext
 
{
 
    public Table<Customer> Customers;
 
    public NorthwindDataContext(IDbConnection connection) : base(connection) { }
 
    public NorthwindDataContext(string connection) : base(connection) { }
 
}
强类型数据上下文使代码更简洁:
NorthwindDataContext ctx = new NorthwindDataContext("server=xxx;database=Northwind;uid=xxx;pwd=xxx");
 
GridView1.DataSource = from c in ctx.Customers where c.CustomerID.StartsWith("A") select new { 顾客ID = c.CustomerID, 顾客名 = c.Name, 城市 = c.City };
 
GridView1.DataBind();
DataContext封装了很多实用的功能,下面抽部分内容介绍
日志功能

using System.IO;
 
NorthwindDataContext ctx = new NorthwindDataContext("server=xxx;database=Northwind;uid=xxx;pwd=xxx");
 
StreamWriter sw = new StreamWriter(Server.MapPath("log.txt"), true); // Append
 
ctx.Log = sw;
 
GridView1.DataSource = from c in ctx.Customers where c.CustomerID.StartsWith("A") select new { 顾客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
说简单点:
1、数据上下文就是取款机;

2、我拿信用卡去取钱,它就把钱吐出来给我(查询数据);

3、并且在银行里面存下取款记录(日志功能);

4、有时候钱多,肯定的拿钱去存下来的,那就是把钱放进取款机里面,我的信用卡就有钱了(添加数据);

5、有一天一不小心掉了手机,需要换号码,换完之后还需要去银行把信用卡的绑定手机号码更改才行,不然没办法接受通知(更新数据

6、;万一有一天我穷的用不起信用卡了,没办法,只能去销卡了(删除数据);


上面这样理解应该很简单了吧~~~距离不当,莫见怪~~
本文由CoolHots原创编译,转载请保留链接: 【十天学会Linq to sql】第二天—–数据上下文
个人主页:CoolHots技术分享
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: