EF Core: один ко многим не хочет загружаться - PullRequest
0 голосов
/ 15 января 2019

Учитывая, что объектная модель 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");

Console Logging

1 Ответ

0 голосов
/ 16 января 2019

Как оказалось, это была проблема с пространством имен. Это был рефакторированный репозиторий, и в верхней его части было:

using System.Data.Entity;

С этим пространством имен оператор .Include был скомпилирован правильно, но EFCore не поднял отношения. Добавить:

using Microsoft.EntityFrameworkCore;

и вдруг SQL правильно генерирует соединения для активных нагрузок.

...