Код фреймворка 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.
Мой вопрос - как правильно определить такие отношения в коде? От многих до многих к одному
Большое спасибо
Ответы
Ответ 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