У меня возникла проблема с инфраструктурой Entity Framework 6.1.3 CodeFirst Отношение «многие ко многим». Моя модель, по существу, например, так:MTM-отношения в EF CodeFirst - обновление проблем
class Schedule
{
int Id { get; set; }
}
class Contest
{
int Id { get; set; }
ICollection<Schedule> GameSchedules { get; set; }
}
Мой контекст для справки:
class MyContext
{
MyContext() : base("name=DefaultConnection")
{
// no lazy loading for us
this.Configuration.LazyLoadingEnabled = false;
// do not auto detect changes for me
this.Configuration.AutoDetectChangesEnabled = false;
// we don't want our stuff to be wrapped in proxies
this.Configuration.ProxyCreationEnabled = false;
}
}
Entity Farmework CodeFirst configuraiton:
class ContestConfiguration : EntityTypeConfiguration<Contest>
{
ContestConfiguration()
{
// setup many-to-many table between game schedules and contests
this.HasMany(contest => contest.GameSchedules)
.WithMany(schedule => schedule.Contests)
.Map(
contestSchedule =>
{
contestSchedule.MapLeftKey("ContestId");
contestSchedule.MapRightKey("ScheduleId");
contestSchedule.ToTable("ContestSchedule", "something");
});
}
}
При создании конкурса с существующим графиком я делаю следующее и я вижу, что два заявления sql вошли, один из которых создает конкурс, и тот, который создает запись для таблицы MTM.
Contest Add(Contest entity)
{
// setup schedules
entity.GameSchedules.ToList().ForEach(schedule => this.Context.Entry(schedule).State = EntityState.Unchanged);
// call base add method
return base.Add(entity);
}
Однако, когда я пытаюсь обновить, его совсем другая история. Я пробовал множество способов и не могу заставить CodeFirst обновлять отношения в таблице MTM. Он либо пытается удалить расписание вместе с записью MTM, либо ничего не делает. Любые идеи о том, как достичь этого умного дуновения?