【发布时间】:2014-08-29 06:07:30
【问题描述】:
课程有许多先决条件,同时一门特定课程可能是许多课程的先决条件。我尝试使用 EF 代码优先建立多对多关系(在 OnModelBCreating 中),其中包含以下内容:
modelBuilder.Entity<Course>()
.HasMany(e => e.Prerequisites)
.WithMany(e => e.Postrequisites)
.Map(m => m.ToTable("CourseRequisiteMappings")
.MapLeftKey("CourseId").MapRightKey("CourseId")); // EDIT: THIS LINE IS THE PROBLEM. SEE MARKED ANSWER AND MY COMMENT ON IT.
另外,这里是 Course 类:
public class Course
{
public int CourseId { get; set; }
public string Name { get; set; }
public string InstitutionCode { get; set; }
public string Description { get; set; }
public bool IsElective { get; set; }
public virtual ICollection<Instructor> Instructors { get; set; }
public virtual ICollection<Student> Students { get; set; }
public virtual ICollection<Module> Modules { get; set; }
public virtual ICollection<Course> Prerequisites { get; set; }
public virtual ICollection<Course> Postrequisites { get; set; }
}
当我实现这个并去更新数据库时,它给了我以下错误:
CourseId:名称:类型中的每个属性名称必须是唯一的。财产 名称“CourseId”已定义。
ModuleId:名称:类型中的每个属性名称必须是唯一的。财产 名称“ModuleId”已定义。
CourseCourse: EntityType: EntitySet 'CourseCourse' 基于类型 没有定义键的“CourseCourse”。
ModuleModule: EntityType: EntitySet 'ModuleModule' 基于类型 没有定义键的“ModuleModule”。
我找不到这样做的例子,这使我相信以下三个之一是正确的:
- 我看不到有一种不同的方法来实现这一点
- 我走在正确的轨道上,但由于我对 EF 缺乏了解而忽略了一些事情
- 我是第一个尝试的,但 EF 不支持这个(不太可能)
首先,有谁知道我可以如何建立这种关系,即这些错误是什么意思(响应 #2)?对于奖励积分,是否有另一种可能更好或更差的方法(有点#1)?提前致谢。
【问题讨论】:
标签: c# entity-framework ef-code-first