Код структуры сущности сначала много ко многим - PullRequest
10 голосов
/ 05 апреля 2011

Я искал всех, но не смог найти ответ ...

Сначала я создал отношения многие ко многим, используя код, который сначала работал хорошо.Каждый человек может быть в нескольких клубах, и каждый клуб может иметь несколько членов.Таблица ClubPersons создана в БД.

public class Person
{
    public int PersonId { get; set; }
    public virtual ICollection<Club> Clubs { get; set; }
}

public class Club
{
    public int ClubId { get; set; }
    public virtual ICollection<Person> Members { get; set; }
}

Затем мне нужно добавить создателя клуба, который также является человеком (один ко многим):

public class Club
{
    public int ClubId { get; set; }
    public virtual ICollection<Person> Members { get; set; }
    public virtual Person Creator { get; set; }
}

После этого таблица ClubPersons в БД исчезла, заменившись Club_Id в таблице People и Person_Id и Creator_Id в таблице Clubs.

КакВы можете видеть, что это не сработает, и я получаю следующую ошибку при попытке добавить персона / клуб:

Multiplicity constraint violated. The role 'Person_Clubs_Source' of the relationship 'Test.Models.Person_Clubs' has multiplicity 1 or 0..1.

Мой вопрос: как правильно определить такие отношения в коде в первую очередь?Много ко многим одному

Большое спасибо

1 Ответ

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

Добавьте следующий метод в ваш контекст:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<Club>().HasRequired(x => x.Creator) //or HasOptional
                               .WithMany() //Unidirectional
                               .Map(x => x.MapKey("Creator")) //FK column Name
                               .WillCascadeOnDelete(false);
}

Это не позволит EF принять двунаправленные отношения с Club.Creator <=> Person.Clubs

...