Ich habe ein kleines Problem beim Aufbau meiner Viele-zu-Viele-Beziehung mit Entity Framework. Ich versuche, über die ConnectionPointRoute eine Viele-zu-Viele-Beziehung zwischen ConnectionPoint und Route herzustellen. Aber beim Ausführen der Datenbankaktualisierung (Ausführen des Seeds) erhalte ich die Meldung "Widersprüchliche Änderungen gefunden. Dies kann passieren, wenn versucht wird, mehrere Entitäten mit demselben Schlüssel einzufügen.". Ich werde wahrscheinlich nur etwas übersehen, aber jede Hilfe wird geschätzt!Widersprüchliche Änderungen erkannt. Viele zu viele Beziehung mit zusätzlichen Werten
public class ConnectionPoint
{
public int ConnectionPointId { get; set; }
public string ConnectionPointName { get; set; }
public virtual Location Location { get; set; }
public virtual ICollection<ConnectionPointRoute> ConnectionPointRoutes { get; set; }
public virtual ICollection<Connection> Connections { get; set; }
}
public class Route
{
public int RouteId { get; set; }
public string RouteName { get; set; }
public virtual ICollection<ConnectionPointRoute> ConnectionPointRoutes { get; set; }
}
public class ConnectionPointRoute
{
public int ConnectionPointId { get; set; }
public int RouteId { get; set; }
public int Position { get; set; }
public virtual ICollection<ConnectionPoint> ConnectionPoints { get; set; }
public virtual ICollection<Route> Routes { get; set; }
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
modelBuilder.Entity<ConnectionPointRoute>()
.HasKey(c => new { c.ConnectionPointId, c.RouteId });
modelBuilder.Entity<ConnectionPoint>()
.HasMany(c => c.ConnectionPointRoutes)
.WithRequired()
.HasForeignKey(c => c.ConnectionPointId);
modelBuilder.Entity<Route>()
.HasMany(c => c.ConnectionPointRoutes)
.WithRequired()
.HasForeignKey(c => c.RouteId);
}
var ConnectionPointRoutes = new List<ConnectionPointRoute>
{
new ConnectionPointRoute { Routes = new List<Route>(), ConnectionPoints= new List<ConnectionPoint>(), Position = 1},
new ConnectionPointRoute { Routes = new List<Route>(), ConnectionPoints= new List<ConnectionPoint>(), Position = 2},
new ConnectionPointRoute { Routes = new List<Route>(), ConnectionPoints= new List<ConnectionPoint>(), Position = 2},
new ConnectionPointRoute { Routes = new List<Route>(), ConnectionPoints= new List<ConnectionPoint>(), Position = 1}
};
ConnectionPointRoutes.ForEach(r => context.ConnectionPointRoutes.AddOrUpdate(r));
context.SaveChanges();
Ich bezweifle EF unterstützt mit autoincrement zusammengesetzten Schlüssel - der Standard wäre DatabaseGeneratedOption.None , so dass diese Einträge unverändert an die Datenbank gesendet werden (alle mit beiden Schlüsselspalten sind auf Standard (int) = 0 gesetzt), und Sie würden erwarten, dass dieser Fehler auftritt. Legen Sie die Schlüssel fest, um bestimmte Werte zu korrigieren, oder bearbeiten Sie den Schlüssel, um dieses Problem zu beheben. – DevilSuichiro
Entschuldigung, ich glaube nicht, dass ich dir folge, könntest du etwas genauer sein? Danke im Voraus! –
Ich denke, Sie stoßen auf das gleiche Problem wie folgt: http://StackOverflow.com/Questions/14751898/How-to-solve-combined-one-to-one-and-one-to-many-relationship-in -ef-5-code-first –