走进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
NHibernate是使用XML作为映射的配置文件,Caslte中的ActiveRecord(底层还是使用NHibernate)是使用Attribute的方式做映射配置。一个是非侵入的,一个是侵入的。有人喜欢用XML做配置,说这样灵活,修改配置无需重新编译,有人喜欢使用Attribute的配置方式,说这样可维护性好,可以得到编译期的检查。
不过在Linq里,这一切都不是问题。Linq to SQL这几种方式都支持,而且走的更远。
纯Attribute方式配置
XMl文件的配置方式
使用SqlMetal命令行工具生成配置代码
使用Visual Studio的设计器生成映射配置代码
纯Attribute方式配置
前面几篇我们都是使用这种Attribute的方式的,在Linq to SQL的第一篇我就介绍了,这些映射的Attribute都存在于System.Data.Linq.Mapping命名空间下。在前面我们已经出现了TableAttribute,ColumnAttribute, AssociationAttribute。实际上还有DataBaseAttribute,ProviderAttribute,FunctionAttribute。本篇后面的内容将在不同的地方对他们做全面的介绍。
Table
Table特性是加在类上面的,不能重复的加,也不能继承。Table,顾名思义,就是用来定义类和数据库表之间的映射的,Table是映射定义的关键点,如果没有给一个类加上Table特性,那么即使这个类里面的属性或字段加上了Column也是无效的,实际上,前面几篇中的例子,如果没有给映射类加Table特性在运行时会抛出一个异常:System.InvalidOperationException,说你的类没有映射为一个Table。Table特性只有一个属性Name,用于在你的类名和数据库表名不同的时候来定义。
Column
Column特性就复杂得多了。不过可喜的是,这些属性的命名都很好,只要见到名字了,基本上就能把意思给猜出来了。
AutoSync
AutoSync:自动同步。这个属性是一个枚举类型:
{
Default,
Always,
Never,
OnInsert,
OnUpdate
}
这个属性的意思是,执行insert和update操作后,这个类的属性如何和数据库表的那个被修改列的字段进行同步。
AutoSync. Default,自动选择,默认就是这个,一般是如果该列在数据库里有默认值,Column的IsDbGenerated属性标记为true的时候则同步。
AutoSync. Always,总是进行同步
AutoSync.Never,从来不同步
AutoSync.OnInsert,在执行插入操作后同步,像我们博客园的那个例子,Blog的Id是主键,自增的,插入数据库的时候我们并不提供,而是数据库自动生成的,那这个时候我们的类插入以后这个Id如何同步呢?
AutoSync. OnUpdate,在更新的时候同步