我需要一個多對多的結構,但有一個聚合約束。 我想要完成的是在純sql中輕鬆完成的,但由於ActiveRecord不鼓勵組合主鍵,我不確定如何在推薦樣式中完成我所需要的操作。複合主鍵方案
這裏是我將不得不在純SQL:
table Project (ID int)
table Report (ProjectWideID nvarchar(50), ProjectID int, primary key (ProjectWideID, ProjectID))
table ChosenReport(ListOrder int, ProjectWideReportID, ReportID, primary key (ProjectID,ProjectWideReportID))
這意味着,一個項目有許多報道。 每個報告都有一個分配的ID,它在項目中是唯一的。 項目有許多選定的報告作爲有序列表,它們中的每一個都通過其項目範圍分配的報告ID引用同一項目中的報告。
但是這裏是我的ActiveRecord類,並且這裏缺少一些東西。現在
[ActiveRecord]
public class Project
{
[PrimaryKey]
public int ID { get; set; }
[HasMany] IList<Report> Reports { get; set; }
[HasMany] IList<ChosenReport> ChosenReports { get; set; }
}
[ActiveRecord]
public class Report
{
[PrimaryKey]
public int ID { get; set; }
[BelongsTo("ProjectID")]
public Project ParentProject { get; set; }
// ... other properties
}
[ActiveRecord]
public class ChosenReport
{
// This one must be a key property
[BelongsTo("ParentProjectID")]
Project ParentProject { get; set; }
// This one must be a key property
[BelongsTo("ParentProjectID")]
Report ParentReport { get; set; }
// ... other properties
}
,因爲我有代理鍵,我不知道該如何約束ChosenReport所以它不能有參考來自不同項目的報告。所以我必須在域中執行約束。我有ActiveRecord這個任何其他選項嗎?