Настройка нескольких отношений между сущностями - PullRequest
2 голосов
/ 10 января 2012

У меня есть Person и Course Сущности с несколькими связями:

public class Course
{
    public int CourseID { get; set; }
    public virtual Person Leader { get; set; }
    public virtual ICollection<Person> Teachers { get; set; }
    public virtual Person CreatedBy { get; set; }
    public virtual Person UpdatedBy { get; set; }
    ...
}

public class Person
{
    public int PersonID { get; set; }
    public virtual ICollection<Course> CoursesCreated { get; set; }
    public virtual ICollection<Course> CoursesUpdated { get; set; }
    public virtual ICollection<Course> CoursesLead { get; set; }
    public virtual ICollection<Course> CoursesTutored { get; set; }
    ...
}

У меня есть следующее отображение:

modelBuilder.Entity<Course>().HasMany(x => x.Tutors)
                           .WithMany(p => p.CoursesTutored)
                           .Map(x =>
                               {
                                   x.MapLeftKey("PersonID");
                                   x.MapRightKey("CourseID");
                                   x.ToTable("Course_Tutors");
                               });

Это работает в том смысле, что устанавливает таблицу Course_Tutors, а также обеспечивает таблицу курсов с Leader_PersonID, CreatedBy_PersonID и UpdatedBy_PersonID

Однако он также создает три дополнительных столбца Person в таблице курса: Person_PersonID1, Person_PersonID2, Person_PersonID3.

Может кто-нибудь сказать мне, как избавиться от них? Я предполагаю, что моему картографированию нужна дополнительная работа.

1 Ответ

4 голосов
/ 10 января 2012

Code First имеет проблемы с идентификацией отношений по конверсиям, когда у вас есть несколько отношений между двумя объектами. Вам необходимо явно настроить их.

modelBuilder.Entity<Course>()
     .HasRequired(c => c.Leader)
     .WithMany(p => p.CoursesLead)
     .Map(m => m.MapKey("Leader_PersonID"));

modelBuilder.Entity<Course>()
     .HasRequired(c => c.CreatedBy)
     .WithMany(p => p.CoursesCreated)
     .Map(m => m.MapKey("CreatedBy_PersonID"));

modelBuilder.Entity<Course>()
     .HasRequired(c => c.UpdatedBy)
     .WithMany(p => p.CoursesUpdated)
     .Map(m => m.MapKey("UpdatedBy_PersonID"));
...