首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >EF核心:一对多并不急于加载

EF核心:一对多并不急于加载
EN

Stack Overflow用户
提问于 2019-01-15 12:46:30
回答 1查看 201关注 0票数 0

考虑到Post的对象模型有很多PostTranslations,我设置了两个对象:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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中,我有以下内容:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
modelBuilder.Entity<Post>(entity => {
    entity.ToTable("Posts");
    entity
    .HasMany<PostTranslation>(x => x.PostTranslations)
    .WithOne(g => g.Post)
    .HasForeignKey(g=>g.PostId);
});

在我的存储库中,我调用以下内容:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
db.Posts.Include(t=>t.PostTranslations).ToList();

但是,在检查生成的SQL时,PostTranslations永远不会加入,而Post对象上的哈希集总是为零。有翻译,它们被正确地连接到数据库中。如果我直接查询数据文本,我可以从数据文本中提取PostTranslations。但我似乎无法让EFCore用一个简单的.Include语句来加载它们。

我遗漏了什么?

编辑生成的SQL如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT [f].[Id],  [f].[Name] FROM [common].[Posts] AS [f]

我希望在那里看到一个到PostTranslations的左连接,所以在迭代ToList()中的变量之后,翻译就在那里了。并且在modelBuilder中设置了“公共”模式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
modelBuilder.HasDefaultSchema("common");

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-16 07:37:27

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
using System.Data.Entity;

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
using Microsoft.EntityFrameworkCore;

突然间,SQL正在为急切的加载正确地生成联接。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54206558

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文