Entity Frameworkとの多対多の関係を構築するときに少し問題があります。私はConnectionPointRoute経由でConnectionPointとRouteの間に多対多の関係を作りようとしています。しかし、DB更新(シードの実行)を実行すると、 "競合する変更が検出されました"というメッセージが表示されます。同じキーで複数のエンティティを挿入しようとすると発生する可能性があります。私はおそらく何かを見落としているだろうが、どんな助けもありがとう!あなたのConnectionPointRoute
競合する変更が検出されました。多く追加の値を持つ多くの関係
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();
を私はEFが自動インクリメントと複合キーをサポートして疑うことはこのように構成されるだろうしたがって、それらのエントリをそのままデータベースに送ります(両方ともキー列がdefault(int)= 0に設定されています)。このエラーが発生すると予想されます。鍵を設定して異なる値を修正するか、鍵を編集してこの問題を修正してください。 – DevilSuichiro
申し訳ありませんが、私はあなたに従ったとは思わない、あなたは少し具体的なことができますか?前もって感謝します! –
私はこの問題と同じ問題に遭遇していると思います:http://stackoverflow.com/questions/14751898/how-to-solve-combined-one-to-one-and-one-to-many-relationship-in -ef-5-code-first –