EF Основные отношения - избыточный идентификатор столбца - PullRequest
0 голосов
/ 26 октября 2018
public class Post
{
    public Guid Id { get; set; }
    public List<File> Files { get; set; }
}

public class File
{
    public Guid Id { get; set; }
    public string PhysicalPath { get; set}
}

И я не уверен, почему EF Core создает таблицу файлов как:

Id, PhysicalPath, PostId

Почему он не может сопоставить идентификаторы каждогоэлемент List<Files> сообщения Post to File.ID вместо создания дополнительного столбца?

Есть ли другое решение, которое изменяет

public List<File> Files { get; set; }

на

public List<Guid> Files { get; set; }

и отправка еще одного запроса для загрузки всех этих файлов?

например

var from_db = new List<File>();

foreach (var fileID in Post.Files)
{
    from_db.Add(_context.files.FirstOrDefault(x => x.Id == FileId));
}

Конечно, я не говорю, что это "путь"загрузка списка - "самая эффективная", потому что наверняка можно загрузить все их в одном запросе, но об этом не стоит думать в этой теме.

1 Ответ

0 голосов
/ 26 октября 2018

Вы можете указать отношения более явно, добавив виртуальный Post и свойство PostId к классу File:

public class Post
{
    public Guid Id { get; set; }
    public virtual List<File> Files { get; set; }
}

public class File
{
    public virtual Post Post { get; set; }
    public Guid PostId { get set; }

    public Guid Id { get; set; }
    public string PhysicalPath { get; set}
}

Затем можно использовать пакет Nuget Microsoft.EntityFrameworkCore.Proxies и загрузить их, например, как:

var post = _context.Posts.SingleOrDefault(x => x.Id == yourid);

File сообщения будут загружаться при доступе к ним.

...