Подтвердить что ты не робот

Код фреймворка Entity сначала много для многих

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

Во-первых, я создал много-много отношений, используя код, который хорошо работал. Каждый человек может быть в нескольких клубах, и каждый клуб может иметь несколько членов. Таблица 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.

Мой вопрос - как правильно определить такие отношения в коде? От многих до многих к одному

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

4b9b3361

Ответ 1

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

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