Ошибка при наличии 2 свойств / отношений одного типа с EF4 Code First - PullRequest
0 голосов
/ 10 апреля 2011

У меня есть класс X, который имеет отношение многие ко многим с Y. Если у меня есть только это свойство, то EF правильно создаст 3-ю таблицу XY. Однако, если я хочу, чтобы отношение типа «многие ко многим» относилось к типу X, а также отношение «1 ко многим» к Y.

Чтобы проиллюстрировать, скажем, у меня есть что-то вроде этого:

class Location
{
  public ICollection<Person> Visitors {get;set;}
}

class Person
{
  public Location Home {get;set}
  public ICollection<Location> VisitedPlaces {get;set;}
}

Когда у меня есть обе ссылки, EF прекращает генерировать 3-ю таблицу и дает мне только отношение 1: 1 для каждого свойства!

1 Ответ

1 голос
/ 10 апреля 2011

Вы должны добавить это в производный контекст:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    base.OnModelCreating(modelBuilder);

    modelBuilder.Entity<Person>()
        .HasRequired(p => p.Home)
        .WithMany()
        .WillCascadeOnDelete(false);
}

Проблема в том, что EF не может правильно вывести отображение, потому что не знает, Visitors коллекция в Location классеявляется частью объявленного отношения «многие ко многим» или отношения «один ко многим» (оно не может быть частью обоих).Мой пример определяет, что отношение «один ко многим» не имеет свойства навигации в Location, поэтому EF теперь знает, что оно является частью отношения «многие ко многим».

...