我正在使用Entity Framework CF,我有一个奇怪的问题,
' StoreContext.Coolers'中的实体参加 ' Cooler_PCParts'关系。 0相关' Cooler_PCParts_Target'是 找到。 1' Cooler_PCParts_Target'是预期的。
在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();
Cooler Initializer:
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);
答案 0 :(得分:1)
我的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);