走进Linq-Linq to SQL How do I(3)
[2] 走进Linq-Linq to SQL How do I(3)
[3] 走进Linq-Linq to SQL How do I(3)
[4] 走进Linq-Linq to SQL How do I(3)
[5] 走进Linq-Linq to SQL How do I(3)
系列文章导航:
不能不说的C#特性-迭代器(下),yield以及流的延迟计算
走进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-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中的事务和延迟计算、延迟加载等内容做详细介绍。