为了账号安全,请及时绑定邮箱和手机立即绑定

EF Core:一对多不是急切加载

EF Core:一对多不是急切加载

C#
qq_遁去的一_1 2022-07-23 09:04:42
鉴于 Post 的对象模型有很多 PostTranslation,我设置了两个对象:public partial class Post{    public Post()   {        PostTranslations = new HashSet<PostTranslation>();    }    public int Id { get; set; }    public string Name { get; set; }    public ICollection<PostTranslation> PostTranslations { get; set; }}public partial class PostTranslation {    public int Id { get; set; }    public string Title { get; set; }    public int PostId { get; set; }    public Post Post { get; set; }}在我的上下文类中,在 OnModelBuilding 中,我有以下内容:modelBuilder.Entity<Post>(entity => {    entity.ToTable("Posts");    entity    .HasMany<PostTranslation>(x => x.PostTranslations)    .WithOne(g => g.Post)    .HasForeignKey(g=>g.PostId);});在我的存储库中,我调用以下内容:db.Posts.Include(t=>t.PostTranslations).ToList();但在检查生成的 SQL 时,PostTranslations 从未加入,并且 Post 对象上的哈希集始终为零。有翻译,它们在数据库中正确连接。如果我直接查询它们,我可以从数据上下文中获取 PostTranslations。但我似乎无法让 EFCore 使用简单的 .Include 语句急切加载它们。我错过了什么?编辑 生成的 SQL 是这样的:SELECT [f].[Id],  [f].[Name] FROM [common].[Posts] AS [f]我预计会在那里看到 PostTranslations 的左连接,所以在我迭代 ToList() 中的变量之后,翻译就会在那里。并且在模型构建器中设置了“通用”模式:modelBuilder.HasDefaultSchema("common");
查看完整描述

1 回答

?
白板的微信

TA贡献1883条经验 获得超3个赞

事实证明,这是一个命名空间问题。这是一个重构的存储库,在它的顶部,有:

using System.Data.Entity;

使用该命名空间,正确编译了 .Include 语句,但 EFCore 没有获取关系。添加:

using Microsoft.EntityFrameworkCore;

突然,SQL 正在为急切的负载正确生成连接。


查看完整回答
反对 回复 2022-07-23
  • 1 回答
  • 0 关注
  • 146 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号