LINQ to SQL有很多值得学习的地方,这里我们主要介绍LINQ to SQL映射关系,包括介绍LINQ to SQL映射关系Demo等方面。
LINQ to SQL映射关系
在 LINQ to SQL 中,数据库关联(如外键到主键关系)是通过应用 AssociationAttribute 属性表示的。
可以在您的实体类中将始终相同的任何数据关系编码为属性引用。例如,在 Northwind 示例数据库中,由于客户通常会下订单,因此在模型中客户与其订单之间始终存在关系。
LINQ to SQL 定义了 AssociationAttribute 属性来帮助表示此类关系。此属性与 EntitySet 和 EntityRef 类型一起使用,来表示将作为数据库中的外键关系的内容。
◆EntitySet :为 LINQ to SQL 应用程序中的一对多关系和一对一关系的集合方提供延迟加载和关系维护。
◆EntityRef:为 LINQ to SQL 应用程序中的一对多关系的单一实例方提供延迟加载和关系维护。
大多数关系都是一对多关系,这一点在本主题后面部分的示例中会有所体现。您还可以按如下方式来表示一对一和多对多关系:
◆一对一:通过向双方添加 EntitySet<(Of <(TEntity>)>) 来表示此类关系。
例如,假设有一个 Customer-SecurityCode 关系,创建此关系的目的是使得在 Customer 表中找不到客户的安全码,而只有得到授权的人才能访问此安全码。
◆多对多:在多对多关系中,链接表(也称作联接表)的主键通常由来自其他两个表的外键组合而成。
例如,假设有一个通过使用链接表 EmployeeProject 构成的 Employee-Project 多对多关系。LINQ to SQL 要求使用以下三个类对这种关系进行模型化: Employee、Project 和 EmployeeProject。在这种情况下,更改 Employee 和 Project 之间的关系似乎需要更新主键 EmployeeProject。但是,这种情况***的模型化处理方法是删除现有 EmployeeProject,然后创建新的 EmployeeProject。
LINQ to SQL映射关系Demo
- [Table(Name = "Student")]
- public class Student
- {
- [Column(IsPrimaryKey = true)]
- public int ID;
- [Column]
- public string StuName;
- [Column]
- public bool Sex;
- [Column]
- public int Age;
- private EntitySet _Scores;
- [Association(Storage = "_Score", OtherKey = "StudentID")]
- public EntitySet Scores
- {
- get { return this._Scores; }
- set { this._Scores.Assign(value); }
- }
- }
- [Table(Name = "Score")]
- public class Score
- {
- [Column(IsPrimaryKey = true)]
- public int ID;
- [Column]
- public int StudentID;
- [Column]
- public float Math;
- [Column]
- public float Chinese;
- [Column]
- public float English;
- [Column]
- public DateTime Times;
- }
【编辑推荐】