您的位置:知识库 » 数据库

走进Linq-Linq to SQL感性认识篇

作者: 横刀天笑  来源: 博客园  发布时间: 2008-09-23 18:52  阅读: 10661 次  推荐: 8   原文链接   [收藏]  
[1] 走进Linq-Linq to SQL感性认识篇
[2] 走进Linq-Linq to SQL感性认识篇

系列文章导航:

走进Linq--Linq横空出世篇

走进Linq-辉煌的背后

走进Linq-Linq大观园

不能不说的C#特性-对象集合初始化器

不能不说的C#特性-匿名类型与隐式类型局部变量

不能不说的C#特性-扩展方法

不能不说的C#特性-匿名方法和Lambda表达式

不能不说的C#特性-迭代器(上)及一些研究过程中的副产品

不能不说的C#特性-迭代器(下),yield以及流的延迟计算

走进Linq-Linq to Objects(上)基础篇

走进Linq-Linq to Objects(下)实例篇

走进Linq-Linq to SQL感性认识篇

走进Linq-Linq to SQL How do I(1)

走进Linq-Linq to SQL How do I(2)

走进Linq-Linq to SQL How do I(3)

走进Linq-How do I(4)拾遗补零篇第一节

走进Linq-Linq to SQL源代码赏析 Table的获取过程

走进Linq-Linq to SQL源代码赏析之Provider的初始化

走进Linq-Linq to SQL源代码赏析,通过Linq to SQL看Linq


很多人一提到Linq就提到操作数据库什么的,其实操作数据库的只是Linq中的Linq to SQLLinq本身是一个很大的家族,而且Linq家族极具扩展性。从人们一提到Linq就把她当作一个ORM这个来看,说明广大程序员对Linq to SQL期望值很高,高过其他几种,对微软在框架中集成ORM的期望值也很高。从今儿起我将用几篇来介绍Linq to SQL

Linq to SQL的核心库是System.Data.Linq.dll(位于C:"Program Files"Reference Assemblies"Microsoft"Framework"v3.5目录下),不过,System.Core.dll里的System.Linq是整个Linq的核心。在System.Data.Linq.dllSystem.Data.Linq命名空间下的DataContext类是Linq to SQL的入口点,可以说Linq to SQL一切奇妙之处都来源如此。通过DataContxt我们可以获取Table对象(这个类和DataContext在同一命名空间下),你会发现Table竟然是继承自IEnumerable,那上一篇介绍的那些查询表达式都可以应用在Table对象上了,呵呵。

有过使用ORM框架的读者肯定知道,一般ORM框架都有个映射,就是将内存中的对象和数据库表做映射,大名鼎鼎的NHibernate是使用XML文件做映射的(我们一般将这种映射称之为无入侵的),还有ActiveRecord模式一般式在属性上加Attribute做映射的(一般称之为侵入式的)Linq to SQL也不例外,也需要一个映射,她使用的是侵入式的,所以就需要一些Attribute,这些Attribute放在System.Data.Linq.Mapping命名空间下。

作为微软大张旗鼓推出的ORMLinq to SQL目前却支持Sql Server,这个未免有些遗憾(所幸的是对于其他几种数据库已经有开源实现了),不过放心,看看核心库里面的命名空间你也许看到了曙光。在System.Data.Linq.dll还有两个命名空间:

System.Data.Linq.Provider,这个命名空间是提供一些Provider模式的接口,由于不同数据库所需要的SQL语句,一些函数都有一些不同,但是她们的操作却都大同小异,所以我们可以抽象一个统一的接口,然后有各个数据库的实现(非常奇怪微软为啥将IProvider接口设置为internal的,难道他只想他自己一个人干?)System.Data.Linq.SqlClient命名空间里放的就是针对Sql Server的实现了,按照这个结构,支持所有的数据库都是可以的。

好了,上面对Linq to SQL的一些组件做了一个大致的介绍,下面就稍微演示一段代码。

要做一个Linq to SQLcase,首先你必须创建一个映射类,该类映射到数据库表。实际上映射类和我们在上一篇所使用的实体类非常相似(确保对System.Data.Linq.dll的引用,并且对System.Data.Linq.Mapping命名空间的声明)

[Table(Name="Users")]
    
public class User
    {
        [Column(IsPrimaryKey
=true)]
        
public int UserId { getset; }
        [Column]
        
public string UserName { getset; }
        [Column]
        
public string Password { getset; }
        [Column]
        
public string BlogName { getset; }
        [Column]
        
public Role Role { getset; }
    }
[第1页][第2页]
8
0
标签:LINQ LINQ to SQL

数据库热门文章

    数据库最新文章

      最新新闻

        热门新闻