Учитывая, что объектная модель 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.
Чего мне не хватает?
EDIT
SQL, который генерируется это:
SELECT [f].[Id], [f].[Name] FROM [common].[Posts] AS [f]
Я ожидал увидеть левое соединение там с PostTranslations, поэтому после итерации переменных в ToList () переводы будут там. И «общая» схема устанавливается в modelBuilder:
modelBuilder.HasDefaultSchema("common");