实体框架:*中的实体参与*关系

用户名

我正在使用Entity Framework CF,但遇到了奇怪的问题,

“ StoreContext.Coolers”中的实体参与
“ Cooler_PCParts”关系。找到0个相关的'Cooler_PCParts_Target'。预期为1个“ Cooler_PCParts_Target”。

首先在StoreInitializer中使用Cooler,这就是为什么显示错误的原因,但是当我更改位置并且例如Discs首先出现时,它的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; }
    }

在StoreContext中,我有这样的事情,因为我的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);
用户名

是的,我解决了。我的问题是像@Ivan Stoev所说的,我有糟糕的局面。现在,每个人都工作良好,并且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);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章