2017-12-14 9 views
0

に参加中のエンティティは、私はEntity FrameworkのCFで働いていると私は奇妙な問題を抱えている、 'StoreContext.Coolers' でEntity Frameworkの:* *関係

エンティティが
'がCooler_PCParts' の関係に参加。 0関連 'Cooler_PCParts_Target'は でした。 1 'Cooler_PCParts_Target'が必要です。

In StoreInitializer Coolerが最初であり、それが原因でエラーが表示されますが、位置が変更されたときなどです。ディスクは、まずDisc_PCPartsプロパティでエラーを表示します。

私PCParts初期化子:

var pcparts = new List<PCParts> 
      { 
       new PCParts { PCPartsID = 1, ElectronicID= 3, Name= "Chłodzenie"}, 
       new PCParts { PCPartsID = 2, ElectronicID= 3, Name= "Dyski"}, 
       new PCParts { PCPartsID = 3, ElectronicID= 3, Name= "Karty dźwiękowe"}, 
       new PCParts { PCPartsID = 4, ElectronicID= 3, Name= "Karty Graficzne"}, 
       new PCParts { PCPartsID = 5, ElectronicID= 3, Name= "Kontrolery PCI"}, 
       new PCParts { PCPartsID = 6, ElectronicID= 3, Name= "Napędy optyczne"}, 
       new PCParts { PCPartsID = 7, ElectronicID= 3, Name= "Obudowy Komputera"}, 
       new PCParts { PCPartsID = 8, ElectronicID= 3, Name= "Pamięć RAM"}, 
       new PCParts { PCPartsID = 9, ElectronicID= 3, Name= "Płyty główne"}, 
       new PCParts { PCPartsID = 10, ElectronicID= 3, Name= "Procesory"}, 
       new PCParts { PCPartsID = 11, ElectronicID= 3, Name= "Zasilacze"}, 

      }; 

      pcparts.ForEach(o => context.PCParts.AddOrUpdate(o)); 
      context.SaveChanges(); 

クーラーイニシャライザ:

var coolers = new List<Cooler> 
      { 
       new Cooler { CoolerID = 1, PCPartsID = 1, ProducerID = 21, Name = "cooler 80 mm", Warranty = "2 lata", Size = "80 mm", RotationSpeed = "2200 obr./min.", MaxNoise = "23 dB", Tension = "12 V", Dimensions = "80 x 80 x 25 mm", AirFlow = "25", Price = 24.90M }, // ok 
       new Cooler { CoolerID = 2, PCPartsID = 1, ProducerID = 21, Name = "cooler 92 mm", Warranty = "2 lata", Size = "92 mm", RotationSpeed = "1800 obr./min.", MaxNoise = "24 dB", Tension = "12 V", Dimensions = "92 x 92 x 25 mm", AirFlow = "25", Price = 12.90M }, //ok 
       new Cooler { CoolerID = 3, PCPartsID = 1, ProducerID = 22, Name = "Amber cooler 120 mm - Ultra Cichy", Warranty = "2 lata", Size = "120 mm", RotationSpeed = "1400 obr./min.", MaxNoise = "18 dB", Tension = "12 V", Dimensions = "120 x 120 x 25 mm", AirFlow = "44.8", LifeOfCooler = "80000 godz.", AdditionalFeatures = "łopatki wirnika w kolorze pomarańczowym", Price = 41.90M},//ok 
       new Cooler { CoolerID = 4, PCPartsID = 1, ProducerID = 22, Name = "Amber cooler 80 mm - Ultra Cichy", Warranty = "2 lata", Size = "80 mm", RotationSpeed = "1800 obr./min.", MaxNoise = "20 dB", Tension = "12 V", Dimensions = "80 x 80 x 25 mm", AirFlow = "24.4", LifeOfCooler = "80000 godz.", AdditionalFeatures = "łopatki wirnika w kolorze pomarańczowym", Price = 32.90M}, //ok 

       new Cooler { CoolerID = 5, PCPartsID = 1, ProducerID = 23, Name = "Dark Blue 120 mm", Warranty = "2 lata", Size = "120 mm", RotationSpeed = "1200 obr./min.", MaxNoise = "22.5 dB", Tension = "12 V", Dimensions = "120 x 120 x 25 mm", AirFlow = "49.21", Price = 25.90M, AdditionalFeatures = "wentylator z niebieskimi diodami" }, //ok 
       new Cooler { CoolerID = 6, PCPartsID = 1, ProducerID = 23, Name = "AirGuard 50 mm", Warranty = "2 lata", Size = "50 mm", RotationSpeed = "4500 obr./min.", MaxNoise = "25.84 dB", Dimensions = "50 x 50 x 10 mm", LifeOfCooler = "50000 godz.", AdditionalFeatures = "złącze: 3-Pin Molex", Price = 11.90M }, //ok 
       new Cooler { CoolerID = 7, PCPartsID = 1, ProducerID = 23, Name = "AirGuard 92 mm", Warranty = "2 lata", Size = "92 mm", RotationSpeed = "2000 obr./min.", MaxNoise = "25.87 dB", Dimensions = "92 x 92 x 25 mm", LifeOfCooler = "50000 godz.", AdditionalFeatures = "3-Pin Molex", Price = 12.90M }, //ok 
       new Cooler { CoolerID = 8, PCPartsID = 1, ProducerID = 24, Name = "Zephyr 60 mm", Warranty = "2 lata", Size = "60 mm", RotationSpeed = "2500 obr./min.", MaxNoise = "17.9 dB", Tension = "12 V", Dimensions = "60 x 60 x 15 mm", AirFlow = "33.66", LifeOfCooler = "50000 godz.", Price = 9.55M }, //ok 
       new Cooler { CoolerID = 9, PCPartsID = 1, ProducerID = 24, Name = "Zephyr 140 mm", Warranty = "2 lata", Size = "140 mm", RotationSpeed = "600 obr./min.", MaxNoise = "8.9 dB", Tension = "12 V", Dimensions = "140 x 140 x 25 mm", AirFlow = "47", LifeOfCooler = "50000 godz." , AdditionalFeatures = "Wtyczka 3 pin | W komplecie śrubki + silikonowe podkładki",Price = 19.50M }, //ok 

      }; 

      coolers.ForEach(c => context.Coolers.AddOrUpdate(c)); 
      context.SaveChanges(); 

PCPartsモデル:

public class PCParts 
    { 
     public int PCPartsID { get; set; } 
     public int ElectronicID { get; set; } 

     public string Name { get; set; } 

     public virtual Electronic Electronic { get; set; } 
     public virtual ICollection<SoundCard> SoundCards { get; set; } 
     public virtual ICollection<Disc> Discs { get; set; } 
     public virtual ICollection<Cooler> Coolers { get; set; } 
     public virtual ICollection<Graphic> Graphics { get; set; } 
     public virtual ICollection<RAM> RAMs { get; set; } 
     public virtual ICollection<CPU> CPUs { get; set; } 
     public virtual ICollection<ComputerCase> ComputerCases { get; set; } 
     public virtual ICollection<Motherboard> Motherboards { get; set; } 

    } 

クーラーモデル:

public class Cooler 
    { 
     public int CoolerID { get; set; } 
     public int ProducerID { get; set; } 
     public int PCPartsID { get; set; } 

     public string Name { get; set; } 
     public string Warranty { get; set; } 
     public string Size { get; set; } 
     public string RotationSpeed { get; set; } 
     public string MaxNoise { get; set; } 
     public string Tension { get; set; } 
     public string Dimensions { get; set; } 
     public string AirFlow { get; set; } 
     public string AdditionalFeatures { get; set; } 
     public string LifeOfCooler { get; set; } 
     public decimal Price { get; set; } 



     public virtual Producer Producer { get; set; } 
     public virtual PCParts PCParts { get; set; } 
    } 

そして、私のFOREIGN KEYは、うん、私はそれを修正する複数のカスケード

 modelBuilder.Entity<Cooler>().HasRequired(c => c.PCParts).WithMany().WillCascadeOnDelete(false); 
     modelBuilder.Entity<DiscType>().HasRequired(c => c.PCParts).WithMany().WillCascadeOnDelete(false); 
     modelBuilder.Entity<SoundCard>().HasRequired(c => c.PCParts).WithMany().WillCascadeOnDelete(false); 
     modelBuilder.Entity<Graphic>().HasRequired(c => c.PCParts).WithMany().WillCascadeOnDelete(false); 
     modelBuilder.Entity<ComputerCase>().HasRequired(c => c.PCParts).WithMany().WillCascadeOnDelete(false); 
     modelBuilder.Entity<RAM>().HasRequired(c => c.PCParts).WithMany().WillCascadeOnDelete(false); 
     modelBuilder.Entity<Motherboard>().HasRequired(c => c.PCParts).WithMany().WillCascadeOnDelete(false); 
     modelBuilder.Entity<CPU>().HasRequired(c => c.PCParts).WithMany().WillCascadeOnDelete(false); 
+1

あなたが存在する場合、ナビゲーションプロパティを持つ流暢APIのオーバーロードを使用していることを確認してください。たとえば、 'Cooler'では' .WithMany(p => p.Coolers) 'にする必要があります。他の人に似ています。単にそれらを省略することはできません。パラメータなしのオーバーロードは、逆ナビゲーションプロパティを持たないシナリオ用です。 –

+0

私はこれを使用しました:https://stackoverflow.com/questions/17127351/introducing-foreign-key-constraint-may-cause-cycles-or-multiple-cascade-paths、これは私が書いたものが間違っていますか?それは働いた:/ – FreeStyle09

+0

クーラー私はモデルをこのプロパティを持っていないクーラーを書くことはできません、PCPartsIDは私の外字キーテーブルPCPartsです、私は何を変更する必要がありますか? – FreeStyle09

答えて

1

を持っているので、StoreContextに、私は、このようにかなっています。私の問題は、@イヴァン・ストーヴェのような悪いオーバーローズがあったということでした。誰もがうまく動作し、dbはうまく更新されます。ご協力ありがとうございます。

マイStoreContextファイルが今になります

modelBuilder.Entity<Laptop>().HasRequired<Electronic>(c => c.Electronic).WithMany(c => c.Laptops).HasForeignKey<int>(c => c.ElectronicID).WillCascadeOnDelete(false); 
      modelBuilder.Entity<PC>().HasRequired<Electronic>(c => c.Electronic).WithMany(c => c.PCs).HasForeignKey<int>(c => c.ElectronicID).WillCascadeOnDelete(false); 
      modelBuilder.Entity<PCParts>().HasRequired<Electronic>(c => c.Electronic).WithMany(c => c.PCParts).HasForeignKey<int>(c => c.ElectronicID).WillCascadeOnDelete(false); 
      modelBuilder.Entity<Network>().HasRequired<Electronic>(c => c.Electronic).WithMany(c => c.Networks).HasForeignKey<int>(c => c.ElectronicID).WillCascadeOnDelete(false); 

      modelBuilder.Entity<Cooler>().HasRequired<PCParts>(c => c.PCParts).WithMany(c => c.Coolers).HasForeignKey<int>(c => c.PCPartsID); 
      modelBuilder.Entity<DiscType>().HasRequired<PCParts>(c => c.PCParts).WithMany(c => c.DiscTypes).HasForeignKey<int>(c => c.PCPartsID); 
      modelBuilder.Entity<SoundCard>().HasRequired<PCParts>(c => c.PCParts).WithMany(c => c.SoundCards).HasForeignKey<int>(c => c.PCPartsID); 
関連する問題