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));
}
当然,我并不是说这种“加载方式”是“最有效的”,因为可以在一个查询中加载所有这些方式,但这并不是在该线程中要考虑的事情。
答案 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将在访问它们时加载。