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

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

作者: 横刀天笑  来源: 博客园  发布时间: 2008-09-23 19:25  阅读: 8188 次  推荐: 0   原文链接   [收藏]  

系列文章导航:

走进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


我们就来看看这个XML映射文件的格式:

<?xml version="1.0" encoding="utf-16"?>
<Database Name="Cnblogs" xmlns="http://schemas.microsoft.com/linqtosql/mapping/2007">
<Table Name="posts">
<Type Name="Yuyijq.Linq.Cnblogs.Domain.Post">
<Column Name="postid" Member="Id" IsPrimaryKey="true" IsDbGenerated="true" />
<Column Name="blogid" Member="BlogId" />
<Column Name="title" Member="Title" />
<Column Name="body" Member="Body" />
<Column Name="createdate" Member="CreateDate" IsDbGenerated="true"/>
</Type>
</Table>
</Database>

大家可以看到,这个文件有一个根元素DataBase,这个对应着Attribute里的DataBaseAttribute,每个DataBase元素可以包含有一个或多个Table,每个Table元素有一个Type元素,这个是用来指定这个Table和哪个实体类对应的。一个Type元素有一个或多个Column和Association元素。从上面的Xml中可以看出,它的用法和Attribute的一样,只是多了一个Member,这个是用来指定实体类的属性的,其余的意义和Attribute的是一样的。

基本上每个ORM工具都提供了代码生成工具,我想如果没有代码生成使用ORM的工作量也是不小的,靠手动的去写实体类和映射文件纯粹是个体力活。Linq to SQL也不例外,为你提供了强大的工具。

使用SqlMetal命令行工具生成配置代码

SqlMetal是个命令行工具,这样你就可以很好的将其与MSBuild等进行集成,以达到自动化的目的。只要写个批处理文件,映射的东东都自动生成了。

关于SqlMetal的用法你只要在命令行里输入SqlMetal /?就可以了,这里就不做过多的介绍。

值得注意的是:我们写的实体类往往希望他们能通过WebService或WCF传递,那么就要求它们是可系列化的,为此微软为SqlMetal工具准备了这个开关:

/serialization:,option有两个值:None和Unidirectional,默认是None。

使用Visual Studio的设计器生成映射配置代码

毕竟整天伴随着我们的是VS,所以还是来个可视化的工具比较过瘾。

你只要在你的项目当中新建一个LINQ to SQL Classes类型的新项,然后从服务器浏览器里把表拖到设计界面上,然后用工具栏里面的工具,连接好各个表之间的关系就OK了。

VS会为我们生成三个文件:一个以dbml为后缀的文件(其实这个文件就是个xml格式的文件,它和刚才只用xml作映射配置的文件格式是类似的)一个C#代码文件,注意到这个代码文件是个局部类,该类和dbml文件共同编译成一个类,这个和asp.net里面的aspx和它的后台代码使用的方式类似。还有一个是以layout为后缀名的,这个文件是设计器使用的,用来存储设计器中各表在界面上的位置,和我们的程序无关。

关于可视化的设计器的使用这里也不做介绍了,自己动动手,然后看看生成的几个文件里到底是什么东西,加上前面对手动操作的详细讲解,我想理解这个将是很容易的事情。

后记

本来想用三篇的长度将如何使用部分,看来还是不行。这篇文章比较长,但东西不是很多。

下一篇将是How do I的最后一篇,将对DataContext,做Update和Delete时RowVersion、Linq to SQL中的事务和延迟计算、延迟加载等内容做详细介绍。

0
0
标签:linq objects

数据库热门文章

    数据库最新文章

      最新新闻

        热门新闻