我有一個實體/類/表是從其他幾個實體引用的,我用Fluent NHibernate來處理ORM給我。在少數情況下,這是一個簡單的引用,我可以將外鍵ID存儲爲列,並以簡單的方式處理引用,但在其他幾個實例中,我需要引用這些項目的列表,並且需要完成此操作至少有三個我能想到的課程。你可以假設這個設置將被複制來處理其他類的關係。流利Nhibernate HasMany從幾個表中的一個表
下面是常見的實體的外觀(由其他幾個實體HasMany
S投資的一個):
public class Student {
public virtual int Id {get; set;}
public virtual string Name {get; set;}
}
而且,這裏的ShopCourse
實體是什麼樣子:
public class ShopCourse {
public virtual int Id {get; set;}
public virtual int Name {get; set;}
public virtual IList<Student> Students {get; set;}
}
想象我有一些其他課程,比如特定課程,可以「擁有」幾名學生。爲了保持這種關係,我必須在我的數據庫中創建一個表,以跟蹤兩者之間的外鍵(對於引用Student
的每個實體) - 此中間表不需要實體,Fluent也不需要考慮它我把它表本身的字符串名稱:
表:ShopCourseStudents
int - ShopCourseId
int - StudentId
最後,這裏是我的映射。您可以假設實體本身的映射很好 - 諸如Id的命名方案等事情已解決並且正常工作。問題在於,當我嘗試初始化有任何實體HasMany
Student
的:
//Inside a FluentlyConfigure().Mappings(m => m.AutoMappings.Add() call:
.Override<ShopCourse>(map => {
map.HasMany(x => x.Students)
.Table("ShopCourseStudents")
.KeyColumns.Add("ShopCourseId")
.KeyColumns.Add("StudentId")
.Cascade.All();
})
的問題是,當我嘗試加載的ShopCourse
個名單,我得到了流利的錯誤:
Foreign key (ABC123AF9:Student [ShopCourseId, StudentId]) must have same number of columns as the referenced primary key (ShopCourses [Id])
我不要覆蓋Fluent的Student
映射,因爲它很簡單。就本示例而言,Student
不需要知道它屬於哪個或其他任何可能擁有該特定Student
記錄的課程。
這似乎是我正在做一些基本的,錯的 - 它是什麼,到底是什麼?提前很多!