Отношения один-к-одному и многие-ко-многим с одним и тем же объектом не строятся правильно - PullRequest
1 голос
/ 26 июля 2011

Я использую кодовый подход Entity Framework 4 для проектирования своей базы данных в ASP MVC 3, и я столкнулся с небольшим затруднением.У меня есть класс POCO, как показано ниже:

public class User
{
    [Key]
    public Guid UserID { get; set; }
    public string UserName { get; set; }
    public DateTime CreationDate { get; set; }
    public string Email { get; set; }
    public int Points { get; set; }
    public Session ActiveSession { get; set; }
    public ICollection<Session> InSessions { get; set; }
}

с Session как другим из моих классов моделей, определенных в другом месте, с ICollection<User> как одним из его свойств.Если я удаляю свойство public Session ActiveSession { get; set; } из класса User, то сопоставление «многие ко многим» и промежуточная таблица UserSessions создаются правильно, но когда я снова добавляю сопоставление «один к одному» ActiveSession,он нарушает отображение «многие ко многим», и промежуточная таблица не создается.Вместо этого таблица Users имеет один внешний ключ к таблице Sessions, каждый для свойств ActiveSession и InSessions.Есть идеи, почему это происходит?

1 Ответ

3 голосов
/ 26 июля 2011

В вашем случае EF считает, что ICollection<User> в Session классе является Many концом отношения один ко многим, созданного ActiveSession.

Так что вам нужно настроить mannualy

modelBuilder.Entity<User>().HasOptional(u => u.ActiveSession)
   .WithMany()
   .Map(u => u.MapKey("ForeignKeyColumn"));

modelBuilder.Entity<User>()
   .HasMany(u => u.InSessions)
   .WithMany(s => s.Users)
   .Map(m =>
       {
           m.ToTable("UserSessions");
           m.MapLeftKey("UserID");
           m.MapRightKey("SessionID");
       });
...