鉴于Post的对象模型有很多PostTranslations,我设置了两个对象:
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中设置了“通用”模式:
modelBuilder.HasDefaultSchema("common");
答案 0 :(得分:1)
事实证明,这是一个名称空间问题。这是一个重构的存储库,它的顶部是:
using System.Data.Entity;
使用该名称空间,.include语句已正确编译,但是EFCore并未拾取关系。添加:
using Microsoft.EntityFrameworkCore;
突然之间,SQL为正确的负载正确生成了联接。