当前位置: 首页 > 编程语言 > .NET综合 > 正文

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

时间:2010-11-25 博客园 横刀天笑

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:自动同步。这个属性是一个枚举类型:

public enum AutoSync
{
Default,
Always,
Never,
OnInsert,
OnUpdate
}