有人可以向我解释我做错了什么吗?
我在 C# 应用程序上使用 Entity Framework 6 和 MySQL。我有很多一对多的关系,我需要抓取所有关联的数据才能在屏幕上显示。
使用延迟加载,需要花费大量时间来拉取数据。我正在运行此查询:
Lot foundLot = EntitiesContext.Lots.Where(x => x.ID == lotID).FirstOrDefault();
这将返回与该 ID 匹配的第一个批次,当我调用后续子项时,它将加载它们。这工作正常,但速度很慢。
我想尝试进行 Eager Loading,但是当我调用“Include”函数时,我的所有数据都被混淆了,并且错误的东西被关联起来。
我就是这样做的:
Lot foundLot = EntitiesContext.Lots.Where(x => x.ID == lotID)
.Include("Parts")
.Include("Parts.Bin")
.Include("Parts.Stations")
.Include("Parts.Stations.Tools")
.Include("Parts.Stations.Tools.Measurements")
.AsNoTracking()
.FirstOrDefault();
注意:我也尝试过使用 Include LINQ 版本
.Include(x => x.Parts.Select(p => p.Stations));
它正确地拉出批次、零件、箱和站,但是当它拉出工具时,它使用的是零件 ID 而不是相关的站 ID。
我已经确认我的外键设置正确。我正在使用代码优先实现,所以当我查看我的 Tool.cs 文件时:
public int? StationID { get; set; }
[ForeignKey("StationID")]
public virtual Station Station { get; set; }
我将我的外键定义为 Station ID,然后在我的 Station 中:
[Key]
public int ID { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<Tool> Tools { get; set; }
并且我有一个将创建我的外键的迁移:
AddForeignKey("tools", "StationID", "stations", "ID", true, "FK_Tools_Stations_StationID");
就像我说的,延迟加载一切都很好。只是很慢。 Eager Loading 混合数据,为什么?
谢谢。