2016-03-22 32 views
0

ile pek çok ilişkiye Varlık Çerçevesi ile Çoktan Çok ilişkiyi oluştururken küçük bir sorun yaşıyorum. ConnectionPoint ve Route arasında ConnectionPointRoute aracılığıyla çok fazla ilişki kurmaya çalışıyorum. Ancak DB güncellemesini yürütürken (Çekirdeği çalıştır), "Çakışan değişiklikler algılandı." Mesajını alıyorum. Bu, aynı anahtarla birden çok öğe eklemeye çalışırken olabilir. " Muhtemelen sadece bir şeyle ilgileniyorum ama herhangi bir yardım takdir edilir! Sizin ConnectionPointRouteÇakışan değişiklikler tespit edildi. Birçok Ek

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(); 
+0

Ben EF autoincrement ile kompozit anahtarı destekler şüphe - Varsayılan DatabaseGeneratedOption.None olurdu Bu nedenle, bu girişleri veritabanına olduğu gibi gönderir (hepsi de her ikisi de anahtar sütunları varsayılan olarak ayarlanır (int) = 0) ve bu hatanın gerçekleşmesini beklersiniz. Farklı değerleri düzeltmek için anahtarları ayarlayın veya bu sorunu gidermek için anahtarı düzenleyin. – DevilSuichiro

+0

Üzgünüm, seni takip ettiğimi sanmıyorum, biraz daha spesifik olabilir misin? Şimdiden teşekkürler! –

+0

Bence aynı konuyla karşılaşıyorsunuz: http://stackoverflow.com/questions/14751898/how-to-solve-combined-one-to-one-and-one-to-many-relationship-in -ef-5-kod-ilk –

cevap

1

iki Listesini <> vardır. ConnectionPoint ve ConnectionPointRoute arasında ve çok sayıda başka bir çok ConnectionPointRoute ve Route (Seçenek # 1) arasında çok mu çok istiyorsun?

Veya ConnectionPoint ve Route arasında çoktan çoğa yapmaya çalışıyorsunuz ConnectionPointRoute birleştirme tablosudur (Seçenek # 2)?

Seçenek 2'yi istediğinizi tahmin ediyorum. Böyle yapılandırılır:

public class ConnectionPointRoute 
{ 
    public int ConnectionPointId { get; set; } 

    public int RouteId { get; set; } 

    public int Position { get; set; } 

    public virtual ConnectionPoint ConnectionPoint { get; set; } 

    public virtual Route Route { get; set; } 
} 

Model Builder:

modelBuilder.Entity<ConnectionPointRoute>() 
    .HasKey(c => new { c.ConnectionPointId, c.RouteId }); 

modelBuilder.Entity<ConnectionPoint>() 
    .HasMany(c => c.ConnectionPointRoutes) 
    .WithRequired(x => x.ConnectionPoint) 
    .HasForeignKey(c => c.ConnectionPointId); 

modelBuilder.Entity<Route>() 
    .HasMany(c => c.ConnectionPointRoutes) 
    .WithRequired(x => x.Route) 
    .HasForeignKey(c => c.RouteId); 

Ve oluşturmak için:

new ConnectionPointRoute { Route = new Route(), ConnectionPoint= new ConnectionPoint(), Position = 1} 
+0

Sadece benim günümü yaptın! Teşekkürler! : D –

İlgili konular