Meine Daten haben eine Viele-zu-Viele-Beziehung zwischen Exhibitions
und Markets
. Beim Erstellen einer neuen Ausstellung sollten einige bestehende Märkte zugewiesen werden. habe ich eine generische Repository, das wie folgt aussieht:EF6 Viele-zu-viele-Beziehung Doppelte Einträge auf Hinzufügen
public virtual TDto Create(TDto data)
{
TEntity entity = ToEntity(data);
DbEntityEntry<TEntity> dbEntity = Context.Entry<TEntity>(entity);
dbEntity.State = EntityState.Added;
UpdateReferences(data, dbEntity);
Context.SaveChanges();
data = ToModel(dbEntity.Entity);
return data;
}
Die Idee ist, jede konkrete Repository zu ermöglichen, seine eigene Behandlung zu definieren, für seine Verweise auf andere Entitäten zu aktualisieren.
protected override void UpdateReferences(Exhibition model, DbEntityEntry<Model.EventManagement.Exhibition> entity)
{
entity.Entity.Markets = new List<Model.EventManagement.Market>();
foreach (var market in model.Markets)
{
var marketEntity = Context.Markets.Single(m => m.Id == market.Id);
entity.Entity.Markets.Add(marketEntity);
}
}
Das Problem, das occures ist, dass die damit verbundenen Märkte dupliziert werden, wenn ich eine neue Ausstellung mit Märkten schaffen, die bereits existieren. Mein Kontext verwendet die folgende Konfiguration:
Configuration.LazyLoadingEnabled = false;
Configuration.ProxyCreationEnabled = false;
Also, meine Frage ist, wie EF davon zu überzeugen, die bestehenden Märkte zu verbinden, anstatt Duplikate zu schaffen?
Ich lese viel über die Verwendung von ID-Eigenschaften neben Navigationseigenschaften, um diese Art von Problemen zu vermeiden, aber mit vielen zu vielen Beziehungen scheint dies keine Option zu sein.
Mein Problem ist, dass die bestehenden Märkte nicht mit der erstellten Ausstellung verbunden sind, sondern die Märkte als Duplikate erstellt werden. – Jensen