基于属性的映射 (LINQ to SQL)

LINQ to SQL 通过应用属性或通过使用外部映射文件将 SQL Server 数据库映射到 LINQ to SQL 对象模型。 本主题概述了基于属性的方法。

LINQ to SQL 最基本的映射形式是将数据库映射到 DataContext,将表映射到类,将列和关系映射到这些类的属性。 您也可以使用属性来将继承层次结构映射到对象模型中。 有关更多信息,请参见 如何:使用 Visual Basic 或 C# 生成对象模型 (LINQ to SQL)

使用 Visual Studio 的开发人员通常会使用 对象关系设计器 来执行基于属性的映射。有关更多信息,请参见 对象关系设计器(O/R 设计器)对象关系设计器(O/R 设计器)对象关系设计器(O/R 设计器). 您还可以使用 SQLMetal 命令行工具,或自行手动编写这些属性的代码。 有关更多信息,请参见 如何:使用 Visual Basic 或 C# 生成对象模型 (LINQ to SQL)

注意注意

您还可以通过使用外部 XML 文件进行映射。有关更多信息,请参见外部映射引用 (LINQ to SQL)

以下各节更加详细地介绍了基于属性的映射。 有关更多信息,请参见 System.Data.Linq.Mapping 命名空间。

DatabaseAttribute 属性

使用此属性可指定在连接未提供名称时数据库的默认名称。 此属性 (Attribute) 是可选的,但如果使用它,则必须按照下表中的说明应用 Name 属性 (Property)。

属性

类型

默认值

说明

Name

String

请参见 Name

与其 Name 属性一起使用,用于指定数据库的名称。

有关更多信息,请参见 DatabaseAttribute

TableAttribute 属性

使用此属性可将类指定为与数据库表或视图关联的实体类。 LINQ to SQL 将具有此属性的类视为持久性类。 下表介绍了 Name 属性。

属性

类型

默认值

说明

Name

String

与类名相同的字符串

将类指定为与数据库表关联的实体类。

有关更多信息,请参见 TableAttribute

ColumnAttribute 属性

使用此属性可指定实体类的某个成员表示数据库表中的列。 您可以将此属性 (Attribute) 应用于任何字段或属性 (Property)。

当 LINQ to SQL 保存对数据库所做的更改时,只会检索并持久保存您标识为列的那些成员。 不具有此属性的成员被假定为非持久的,且不会被提交以进行插入或更新。

下表介绍了此属性 (Attribute) 的属性 (Property)。

属性

类型

默认值

说明

AutoSync

AutoSync

Never

指示公共语言运行库 (CLR) 在执行插入或更新操作后检索值。

可供选择的值:Always、Never、OnUpdate、OnInsert。

CanBeNull

Boolean

true

指示列可以包含 null 值。

DbType

String

推断出的数据库列类型

使用数据库类型和修饰符来指定数据库列的类型。

Expression

String

定义数据库中计算所得的列。

IsDbGenerated

Boolean

false

指示列包含数据库自动生成的值。

IsDiscriminator

布尔值

false

指示列包含 LINQ to SQL 继承层次结构的鉴别器值。

IsPrimaryKey

布尔值

false

指定此类成员表示作为表主键或表主键一部分的列。

IsVersion

布尔值

false

将成员的列类型标识为数据库时间戳或版本号。

UpdateCheck

UpdateCheck

除非对某个成员而言 IsVersion 为 true,否则为 Always

指定 LINQ to SQL 如何实现开放式并发冲突的检测。

有关更多信息,请参见 ColumnAttribute

注意注意

AssociationAttribute 和 ColumnAttribute Storage 属性值区分大小写。例如,请确保 AssociationAttribute.Storage 属性 (Property) 的属性 (Attribute) 中使用的值与代码中其他位置使用的相应属性 (Property) 名称值的大小写相匹配。这适用于所有 .NET 编程语言,即使是那些通常不区分大小写的编程语言,包括 Visual Basic。有关 Storage 属性的更多信息,请参见 DataAttribute.Storage

AssociationAttribute 属性

使用此属性 (Attribute) 可指定属性 (Property) 表示数据库中的关联,如外键对主键关系。 有关关系的更多信息,请参见 如何:映射数据库关系 (LINQ to SQL)

下表介绍了此属性 (Attribute) 的属性 (Property)。

属性

类型

默认值

说明

DeleteOnNull

Boolean

false

当放置在其外键成员均不可以为 null 的关联上时,如果该关联设置为 null,则删除对象。

DeleteRule

String

向关联添加删除行为。

IsForeignKey

Boolean

false

如果为 true,则将成员指定为表示数据库关系的关联中的外键。

IsUnique

布尔值

false

如果为 true,则指示对外键的唯一性约束。

OtherKey

字符串

相关类的 ID

将目标实体类的一个或多个成员指定为关联的另一端上的键值。

ThisKey

字符串

包含类的 ID

指定此实体类的成员表示关联的此端上的键值。

有关更多信息,请参见 AssociationAttribute

注意注意

AssociationAttribute 和 ColumnAttribute Storage 属性值区分大小写。例如,请确保 AssociationAttribute.Storage 属性 (Property) 的属性 (Attribute) 中使用的值与代码中其他位置使用的相应属性 (Property) 名称值的大小写相匹配。这适用于所有 .NET 编程语言,即使是那些通常不区分大小写的编程语言,包括 Visual Basic。有关 Storage 属性的更多信息,请参见 DataAttribute.Storage

InheritanceMappingAttribute 属性

使用此属性可映射继承层次结构。

下表介绍了此属性 (Attribute) 的属性 (Property)。

属性

类型

默认值

说明

Code

String

无。 必须提供值。

指定鉴别器的代码值。

IsDefault

布尔值

false

如果为 true,则在存储区中没有与指定值中的任何一个值匹配的鉴别器值时实例化此类型的对象。

Type

类型

无。 必须提供值。

指定层次结构中的类的类型。

有关更多信息,请参见 InheritanceMappingAttribute

FunctionAttribute 属性

使用此属性可指定方法表示数据库中的存储过程或用户定义函数。

下表介绍了此属性 (Attribute) 的属性 (Property)。

属性

类型

默认值

说明

IsComposable

Boolean

false

如果为 false,则指示映射到存储过程。 如果为 true,则指示映射到用户定义的函数。

Name

字符串

与数据库中的名称相同的字符串

指定存储过程或用户定义函数的名称。

有关更多信息,请参见 FunctionAttribute

ParameterAttribute 属性

使用此属性可映射存储过程方法中的输入参数。

下表介绍了此属性 (Attribute) 的属性 (Property)。

属性

类型

默认值

说明

DbType

String

指定数据库类型。

Name

String

与数据库中的参数名相同的字符串

指定参数的名称。

有关更多信息,请参见 ParameterAttribute

ResultTypeAttribute 属性

使用此属性可指定结果类型。

下表介绍了此属性 (Attribute) 的属性 (Property)。

属性

类型

默认值

说明

Type

Type

(无)

用于映射到返回 IMultipleResults 的存储过程的方法。 为存储过程声明有效的或预期的类型映射。

有关更多信息,请参见 ResultTypeAttribute

DataAttribute 属性

使用此属性可指定名称和私有存储字段。

下表介绍了此属性 (Attribute) 的属性 (Property)。

属性

类型

默认值

说明

Name

String

与数据库中的名称相同

指定表、列等的名称。

Storage

字符串

公共访问器

指定基础存储字段的名称。

有关更多信息,请参见 DataAttribute

请参见

其他资源

参考 (LINQ to SQL)