我有一个实体/类/表是从其他几个实体引用的,我用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
记录的课程。
这似乎是我正在做一些基本的,错的 - 它是什么,到底是什么?提前很多!