Student 與 Subject 為多對多關係:一位學生可修多門課,一門課可被多位學生選修。需引入關聯表 Student_Subject。
CREATE TABLE Student (
ID INT IDENTITY(1,1) PRIMARY KEY,
StudentName VARCHAR(50) NOT NULL
);
CREATE TABLE Subject (
ID INT IDENTITY(1,1) PRIMARY KEY,
SubjectName VARCHAR(50) NOT NULL
);
CREATE TABLE Student_Subject (
StudentID INT NOT NULL,
SubjectID INT NOT NULL
);
三個必要子屬性:
[HasAndBelongsToMany(typeof(Subject),
Table = "Student_Subject",
ColumnKey = "StudentID",
ColumnRef = "SubjectID")]
public IList SubjectList { get; set; } = new ArrayList();
[HasAndBelongsToMany(typeof(Student),
Table = "Student_Subject",
ColumnKey = "SubjectID",
ColumnRef = "StudentID")]
public IList StudentList { get; set; } = new ArrayList();
None / All / SaveUpdate / Deletetrue)using (var scope = new TransactionScope())
{
var student = new Student { Name = "jailu" };
for (int i = 0; i < 5; i++)
{
var sub = new Subject { Name = "Subject " + i };
sub.Create(); // 必須先持久化 Subject
student.SubjectList.Add(sub);
}
student.Save(); // 級聯寫入關聯表
scope.VoteCommit();
}
注意:加入集合的對象必須已存在資料庫(已有主鍵),否則儲存學生時會失敗。