C# 使用带有复合密钥的EF6 Fluent Api进行即时加载时,无法加载相关实体
我必须错误地创建了C# 使用带有复合密钥的EF6 Fluent Api进行即时加载时,无法加载相关实体,c#,entity-framework-6,repository-pattern,eager-loading,ef-fluent-api,C#,Entity Framework 6,Repository Pattern,Eager Loading,Ef Fluent Api,我必须错误地创建了组合键,或者将其连接到了相关实体。我可以让它在一个简单的单键场景中工作,但是复合键失败了。我将显示工作版本和非工作版本 我的班级: public class Parts { public string PartID { get; set; } public string Revision { get; set; } } public class InstanceHistories { public int HistoryID { get; set; }
组合键
,或者将其连接到了相关实体
。我可以让它在一个简单的单键场景中工作,但是复合键
失败了。我将显示工作版本和非工作版本
我的班级:
public class Parts {
public string PartID { get; set; }
public string Revision { get; set; }
}
public class InstanceHistories {
public int HistoryID { get; set; }
public string PartID { get; set; }
public string Revision { get; set; }
public virtual Parts Part { get; set; }
}
Fluent API-有效
modelBuilder.Entity<Parts>().HasKey(p => new { p.PartID });
modelBuilder.Entity<InstanceHistories>().HasKey(i => i.HistoryID);
modelBuilder.Entity<InstanceHistories>().HasRequired(i => i.Part);
此repo调用将加载回我的相关零件对象,不会出现任何问题
当我更改Fluent API以使部件具有一个复合键时,我的repo调用将不再返回相关实体
非工作Fluent API更新
modelBuilder.Entity<Parts>().HasKey(p => new { p.PartID, p.Revision });
modelBuilder.Entity().HasKey(p=>new{p.PartID,p.Revision});
我尝试了一些不同的。使用many()
,。HasForeignKey()
,。hasportional()
的场景,但似乎没有什么能真正让这个部分退步。我甚至尝试了延迟加载
,但它们不会返回,所以我知道我的设置一定有问题。有人遇到过这种情况吗
编辑
即使我强制显示SQL(即uow.Context.Database.Log=Console.WriteLine;),
我也会看到相关实体出现在连接结果中
此外,我没有收到任何错误。只需在Part对象上返回null。发布的示例模型和配置都很好。在干净的环境(最新的EF6.1.3,SqlServer db)中进行测试,一切正常(填充了部分属性)。在你的真实场景中,有些事情必须有所不同。如果不提供可复制的样品,我看不出我们能帮上什么忙。哦,有趣。。。我将在一个干净的设置上重建,以查看是否得到相同的结果。谢谢@Ivanstoeva您在更改密钥后是否正在运行迁移?不运行任何EF迁移。您是否在数据库的parts表上设置了复合密钥?
modelBuilder.Entity<Parts>().HasKey(p => new { p.PartID, p.Revision });