2012-01-10 3 views
2

Я имею 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.

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

ответ

4

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

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")); 
+0

Я думал, что будет делать эту работу, но его дает мне следующее сообщение об ошибке: Тип Course_UpdatedBy не определен в пространстве имен StudentProject.EFRepository (Alias ​​= Я) – James

+1

@james ли вы включить все эти отображения правильно? Используете ли вы ранее созданную структуру базы данных с новыми сопоставлениями? есть ли другие свойства, которые вы не отображали? – Eranga

+0

Теперь я получаю «циклическую ссылку, которая не разрешена». [Constraint name = Course_Tutors_Target] ». Так близко к фиксации этого! – James

Смежные вопросы