2015-09-29 4 views
2

Приложение использует EF 6.1 против ранее существовавшей базы данных.Однонаправленная БД сначала многим многим с картой по-прежнему кажется, что требуется свойство навигации

У меня есть однонаправленное отношение многих к многим из (имена классов были изменены, чтобы сделать этот пример глупым) Fans до Celebrities. например каждый экземпляр Fan следует за одним или несколькими Celebrities, но каждый экземпляр Celebrity не отслеживает, какие Fans следуют за указанным Celebrity.

С этой целью класс Fan имеет свойство навигации до ICollection<Celebrity>, но не наоборот. Как видно из приведенного ниже класса карты, составная таблица связывает два.

К сожалению, var celebrities = db.Celebrities.ToList(); получает мне ошибку:

Invalid column name 'Fan_Id'. 

Может кто-то пожалуйста, скажите мне, что я сделал не так? У меня есть несколько однонаправленных отношений «один ко многим» в одном и том же приложении, которые работают. A (несколько) сокращенное изложение сущностей и их карт:

public class Celebrity 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    // by design, no navigation property to ICollection<Fan> 
} 

public class Fan 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public virtual ICollection<Celebrity> FollowedCelebrities { get; set; } 
} 

public class CelebrityMap : EntityTypeConfiguration<Celebrity> 
{ 
    public CelebrityMap() 
    { 
     HasKey(t => t.Id); 
     ToTable("Celebrities"); 
     Property(t => t.Id).HasColumnName("CelebrityId"); 
     Property(t => t.Description).HasColumnName("Name"); 
    } 
} 

public class FanMap : EntityTypeConfiguration<Fan> 
{ 
    public FanMap() 
    { 
     HasKey(t => t.Id); 
     ToTable("Fans"); 
     Property(t => t.Id).HasColumnName("FanId"); 
     Property(t => t.Name).HasColumnName("Name"); 

     HasMany(t => t.FollowedCelebrities) 
      .WithMany() 
      .Map(m => 
      { 
       m.ToTable("FanCelebrityAssignments"); 
       m.MapLeftKey("FanId"); 
       m.MapRightKey("CelebrityId"); 
      }); 
    } 
} 
+0

Я не уверен, как это исправить, но исключение означает, что существует некоторый столбец «Fan_Id», созданный в таблице «Celebrity» (но, конечно, не присутствует). Как-то он предполагает, что отношения между «Фан-Знамени» - это «один-много» (в то время как это должно быть «много-много»). Я вижу, что вы пытались настроить отношения как «многие-многие» внутри «FanMap», но не уверены, достаточно ли этого. – Hopeless

+0

Вы проверили, что в БД применены все миграции? Похоже, вы попробовали другую конфигурацию, применили ее к БД, но не отменили/отменили ее правильно. Или что-то. – Vlad274

+0

Да, или что-то в этом роде. Я понял это, см. Ответ. – wilee

ответ

1

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

В моем контексте контекста данных есть переопределение OnModelCreating(DbModelBuilder modelBuilder), и в этом переопределении существует много классов карт, назначенных modelBuilder.Configurations.

К сожалению, в то время как FanMap существует, он не был одним из тех классов, добавленных в Configurations. Я добавил его, и теперь все работает правильно.

+0

Благодарим за сообщение об этом. Это должно было повредить мне весь день! – Vlad274