您的位置:首页 > 数据库

LINQ to SQL StepByStep (1)

2008-09-10 16:38 246 查看
首先关心其类库:

System.Data.Linq

包含支持在 LINQ to SQL 应用程序中与关系数据库进行交互的类。

LINQ to SQL 是一种技术,可提供用于将关系数据作为对象管理的运行时基础结构。

System.Data.Linq.Mapping

包含用于生成表示关系数据库的结构和内容的 LINQ to SQL 对象模型的类。

什么是LINQ to SQL技术呢?

是 .NET Framework 3.5 版的一个组件,提供了用于将关系数据作为对象管理的运行时基础结构。

在 LINQ to SQL 中,关系数据库的数据模型映射到用开发人员所用的编程语言表示的对象模型。当应用程序运行时,LINQ to SQL 会将对象模型中的语言集成查询转换为 SQL,然后将它们发送到数据库进行执行。当数据库返回结果时,LINQ to SQL 会将它们转换回您可以用您自己的编程语言处理的对象。

通过使用 LINQ to SQL,您可以使用 LINQ 技术访问 SQL 数据库,就像您访问内存中的集合一样。参考:这里

入门演练一:简单对象模型和查询

请访问:http://msdn.microsoft.com/zh-cn/library/bb386940.aspx

记录一下:

1、需要引用 System.Data.Linq 和 System.Data.Linq.Mapping 的命名空间,可能需要添加引用;

2、把表映射到实体类,在类声明的上方添加 TableAttribute 属性;   

TableAttribute 属于命名空间 System.Data.Linq.Mapping ,该属性可将某个类指定为与数据库表或视图相关联的实体类。LINQ to SQL将具有 TableAttribute 属性的类视为持久性类

LINQ to SQL 仅支持单表映射。即,实体类必须只映射到一个数据库表,且无法同时将数据库表映射到多个类。

可以使用 TableAttribute 属性 (Attribute) 的 Name 属性 (Property) 来指定表名称,并可以选择使用架构名称来限定表名称。如果未使用 Name 属性指定名称,则假定表名称与类名相同。 

3、相应的表字段也映射到实体类中的对应属性,在实体类属性声明的上方添加 CloumnAttribute 属性;

使用此属性可指定实体类的某个成员表示数据库表中的列。可以将此属性应用于 public、private 或 internal 类型的任何字段或属性。

当 LINQ to SQL 保存对数据库所做的更改时,只有那些标识为列的实体类成员是持久的。

使用逗号分隔属性 (Attribute) 的多个属性 (Property)。如:

[Column(Storage="_LastName", DbType="NVarChar(20) NOT NULL", 

         CanBeNull=false)]

public string LastName

4、使用 DataContext 建立与SQL的连接以及查询;

DataContext 对象在基于代码的数据结构与数据库本身之间建立连接。是用于从数据库检索对象和提交更改的主要通道。

表示 LINQ to SQL 框架的主入口点。

DataContext 是通过数据库连接映射的所有实体的源。它会跟踪您对所有检索到的实体所做的更改,并且保留一个“标识缓存”,该缓存确保使用同一对象实例表示多次检索到的实体。

DataContext 实例设计为持续一个“工作单位”,但您的应用程序可以定义该持续周期。

DataContext 是轻量的,创建它不需要很大的开销。

典型的 LINQ to SQL 应用程序在方法范围内创建 DataContext 实例,或将这些实例创建为生存期较短的类(这些类表示相关数据库操作的逻辑集合)的成员。

5、延迟执行,所创建查询代码只是描述查询,当程序运行到此处时,并未真正执行查询;

IQueryable<Customer> custQuery =

    from cust in Customers

    where cust.City == "London"

    select cust;

6、实际执行查询,查询表达式只有在需要结果时才会进行计算;

开始 foreach 迭代时,将会针对数据库执行 SQL 命令,并将对象具体化。

foreach (Customer cust in custQuery)

{

...

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: