I am having a slight problem when building my Many to Many relation with Entity Framework. I try to make a many to many relationship between ConnectionPoint and and Route, via the ConnectionPointRoute. But on executing the DB update (Run the seed), I get the message "Conflicting changes detected. This may happen when trying to insert multiple entities with the same key.". I am probably just overlooking something but any help is appreciated!
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();