Не удается связать модели М-М в EF 5
Очередная напасть: Есть первая модель:
[Table("Employee")]
public class Employee
{
[Key]
public int Id { get; set; } //Идентификатор
public string Name { get; set; } //Имя
public string Surname { get; set; } //Фамилия
public string Patronymic { get; set; } //Отчество
public ICollection<Project> LeaderProjects { get; set; } //1 сотрудник может быть руководителем нескольких проектов
public ICollection<Project> EmployeeProjects { get; set; } //1 сотрудник может быть работником нескольких проектов
public virtual ICollection<Project> ExecutorProjects { get; set; } //1 сотрудник может быть исполнителем нескольких проектов
public override string ToString()
{
return $"{Surname} {Name[0]}. {Patronymic[0]}.";
}
}
Есть вторая модель:
public class Project
{
[Key]
public int Id { get; set; } //Идентификатор
public string Name { get; set; } //Имя
public string CompanyCustomer { get; set; } //Компания-заказчик
public string CompanyExecutor { get; set; } //Компания-исполнитель
public int? EmployeeId { get; set; }
public Employee Employee { get; set; } //Сотрудник
public int? LeaderId { get; set; }
public Employee Leader { get; set; } //Руководитель
public virtual ICollection<Employee> Executors { get; set; } //Исполнитель
public DateTime Start { get; set; } //Дата начала проекта
public DateTime Finish { get; set; } //Дата окончания проекта
[Column(TypeName = "int")]
public Priority Priority { get; set; } //Приоритет
public override string ToString()
{
return Name;
}
}
Есть DbContext
public class ApplicationDbContext : DbContext
{
public DbSet<Project> Projects { get; set; }
public DbSet<Employee> Employees { get; set; }
readonly string stringConnect;
public ApplicationDbContext()
{
}
public ApplicationDbContext(string stringConnect)
{
this.stringConnect = stringConnect;
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder
.Entity<Employee>()
.HasMany(e => e.EmployeeProjects)
.WithOne(p => p.Employee);
modelBuilder
.Entity<Employee>()
.HasMany(e => e.LeaderProjects)
.WithOne(p => p.Leader);
modelBuilder
.Entity<Employee>()
.HasMany(e => e.ExecutorProjects)
.WithMany(p => p.Executors)
.UsingEntity(j => j.ToTable("EmployeeProject"));
var emp = new Employee { Id = 1, Name = "Игорь", Surname = "Панфлов", Patronymic = "Платонович" };
var emp2 = new Employee { Id = 2, Name = "Степан", Surname = "Князев", Patronymic = "Даниилович" };
var emp3 = new Employee { Id = 3, Name = "Аверьян", Surname = "Корнилов", Patronymic = "Демьянович" };
var prj = new Project { Id = 1, EmployeeId = emp.Id, LeaderId = emp.Id, CompanyCustomer = "Customer", CompanyExecutor = "Executor", Start = DateTime.Now, Finish = DateTime.Now.AddDays(10), Name = "SuperProject", Priority = Priority.High };
var prj2 = new Project { Id = 2, EmployeeId = emp2.Id, LeaderId = emp2.Id, CompanyCustomer = "Customer2", CompanyExecutor = "Executor2", Start = DateTime.Now, Finish = DateTime.Now.AddDays(13), Name = "SuperProject2", Priority = Priority.Low };
var prj3 = new Project { Id = 3, EmployeeId = emp3.Id, LeaderId = emp3.Id, CompanyCustomer = "Customer3", CompanyExecutor = "Executor3", Start = DateTime.Now, Finish = DateTime.Now.AddDays(16), Name = "SuperProject3", Priority = Priority.Middle };
prj.Executors = new[] { emp, emp2, emp3 }; //Exception
modelBuilder.Entity<Employee>()
.HasData(emp, emp2, emp3);
modelBuilder.Entity<Project>()
.HasData(prj, prj2, prj3 );
base.OnModelCreating(modelBuilder);
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlite($"Filename={stringConnect}");
}
}
При попытке добавить в проект исполнителей выскакивает следующее исключение: The seed entity for entity type 'Project' cannot be added because it has the navigation 'Executors' set. To seed relationships, add the entity seed to 'EmployeeProject (Dictionary<string, object>)' and specify the foreign key values {'ExecutorProjectsId'}. Consider using 'DbContextOptionsBuilder.EnableSensitiveDataLogging' to see the involved property values.
В чем может быть проблема, подскажите, ведь отношение 1-М работает как нужно, а при М-М исключение