基于特性的映射
LINQ to SQL 通过应用属性或通过使用外部映射文件将 SQL Server 数据库映射到 LINQ to SQL 对象模型。 本主题概述了基于属性的方法。
LINQ to SQL 最基本的映射形式是将数据库映射到 DataContext、将表映射到类、将列和关系映射到这些类的属性。 您也可以使用属性来将继承层次结构映射到对象模型中。 有关详细信息,请参阅如何:在 Visual Basic 或 c # 中生成对象模型。
使用 Visual Studio 的开发人员通常使用对象关系设计器执行基于属性的映射。 也可以使用 SQLMetal 命令行工具,或亲自手动对属性进行编码。 有关详细信息,请参阅如何:在 Visual Basic 或 c # 中生成对象模型。
备注
您还可以通过使用外部 XML 文件进行映射。 有关详细信息,请参阅外部映射。
以下各节更加详细地介绍了基于属性的映射。 有关更多信息,请参见 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 | 从不 | 指示公共语言运行库 (CLR) 在执行插入或更新操作后检索值。 可供选择的值:Always、Never、OnUpdate、OnInsert。 |
CanBeNull | 布尔 | true |
指示列可以包含 null 值。 |
DbType | String | 推断出的数据库列类型 | 使用数据库类型和修饰符来指定数据库列的类型。 |
Expression | String | 空 | 定义数据库中计算所得的列。 |
IsDbGenerated | 布尔 | false |
指示列包含数据库自动生成的值。 |
IsDiscriminator | 布尔 | false |
指示列包含 LINQ to SQL 继承层次结构的鉴别器值。 |
IsPrimaryKey | 布尔 | false |
指定此类成员表示作为表主键或表主键一部分的列。 |
IsVersion | 布尔 | false |
将成员的列类型标识为数据库时间戳或版本号。 |
UpdateCheck | UpdateCheck | 除非对某个成员而言 Always 为 IsVersion,否则为 true |
指定 LINQ to SQL 如何实现乐观并发冲突的检测。 |
有关详细信息,请参阅 ColumnAttribute。
注意
AssociationAttribute 和 ColumnAttribute Storage 属性值区分大小写。 例如,请确保 AssociationAttribute.Storage 属性 (Property) 的属性 (Attribute) 中使用的值与代码中其他位置使用的相应属性 (Property) 名称值的大小写相匹配。 这适用于所有 .NET 编程语言,即使是那些通常不区分大小写的编程语言,包括 Visual Basic。 有关 Storage 属性的更多信息,请参见 DataAttribute.Storage。
AssociationAttribute 属性
使用此属性 (Attribute) 可指定属性 (Property) 表示数据库中的关联,如外键对主键关系。 有关关系的详细信息,请参阅如何:映射数据库关系。
下表介绍了此属性 (Attribute) 的属性 (Property)。
属性 | 类型 | 默认 | 描述 |
---|---|---|---|
DeleteOnNull | Boolean | false |
当放置在其外键成员均不可以为 null 的关联上时,如果该关联设置为 null,则删除对象。 |
DeleteRule | 字符串 | 无 | 向关联添加删除行为。 |
IsForeignKey | 布尔 | false |
如果为 true,则将成员指定为表示数据库关系的关联中的外键。 |
IsUnique | 布尔 | false |
如果为 true,则指示对外键的唯一性约束。 |
OtherKey | String | 相关类的 ID | 将目标实体类的一个或多个成员指定为关联的另一端上的键值。 |
ThisKey | String | 包含类的 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 | String | 与数据库中的名称相同的字符串 | 指定存储过程或用户定义函数的名称。 |
有关详细信息,请参阅 FunctionAttribute。
ParameterAttribute 属性
使用此属性可映射存储过程方法中的输入参数。
下表介绍了此属性 (Attribute) 的属性 (Property)。
属性 | 类型 | 默认 | 说明 |
---|---|---|---|
DbType | 字符串 | 无 | 指定数据库类型。 |
Name | String | 与数据库中的参数名相同的字符串 | 指定参数的名称。 |
有关详细信息,请参阅 ParameterAttribute。
ResultTypeAttribute 属性
使用此属性可指定结果类型。
下表介绍了此属性 (Attribute) 的属性 (Property)。
属性 | 类型 | 默认 | 说明 |
---|---|---|---|
Type | 类型 | (无) | 用于映射到返回 IMultipleResults 的存储过程的方法。 为存储过程声明有效的或预期的类型映射。 |
有关详细信息,请参阅 ResultTypeAttribute。
DataAttribute 属性
使用此属性可指定名称和私有存储字段。
下表介绍了此属性 (Attribute) 的属性 (Property)。
属性 | 类型 | 默认 | 说明 |
---|---|---|---|
Name | String | 与数据库中的名称相同 | 指定表、列等的名称。 |
Storage | String | 公共访问器 | 指定基础存储字段的名称。 |
有关详细信息,请参阅 DataAttribute。