Если у вас нет сопоставления с Fluent API, EF создаст сопоставление на основе соглашений. Соглашение в этом случае таково, что List1
и List2
являются обратными навигационными свойствами одного и того же отношения - в данном случае это «самоссылающиеся» отношения «многие ко многим».
Эффект, который вы испытываете, представляет собой автоматическое исправление отношений , которое выполняется, когда вызывается DetectChanges()
(или SaveChanges()
, который вызывает DetectChanges()
внутри). Это исправление автоматически обновляет свойства обратной навигации присоединенных объектов, чтобы они соответствовали друг другу. Вы не можете предотвратить это, и это не должно быть проблемой.
Редактировать
Если вам не нужно отображение между двумя списками, вы должны указать явное отображение с помощью Fluent API. Например: если оба списка принадлежат отдельным отношениям «один ко многим», необходимо указать:
modelBuilder.Entity<SomeClass>()
.HasMany(s => s.List1)
.WithRequired() // or WithOptional()
.WillCascadeOnDelete(false);
modelBuilder.Entity<SomeClass>()
.HasMany(s => s.List2)
.WithRequired() // or WithOptional()
.WillCascadeOnDelete(false);
Это отображение говорит о том, что второй конец каждого отношения не представлен в модели (следовательно, WithRequired()
/ WithOptional()
без параметра).
Подобным образом вы можете указать два отношения "многие ко многим" с HasMany(s => s.List1/2).WithMany().Map(...)
.