EF核心关系-冗余列ID

时间:2018-10-26 10:20:45

标签: c# asp.net-core-mvc entity-framework-core

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

为什么他不能将Post List<Files>的每个元素的ID映射到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 :(得分:1)

您可以通过向Post类添加虚拟File和PostId属性来更明确地指定关系:

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 s将在访问它们时加载。