我有一个带有Entity Framework Core的MVC应用程序。当我运行它时,它不起作用(我可能曾经发誓它曾经起作用过),但在调试时,它的工作时间约为一半。设置模型时我做错了什么?我按照循序渐进的指南进行操作,但现在找不到了。抱歉,如果这是重复的,我找不到正确的搜索关键字来找到类似的内容。

型号/BaseProduct.cs

public abstract class BaseProduct
{
    public int Id { get; set; }
    public string Brand { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
    public string Model { get; set; }
    [Display(Name = "Main Image")]

    public virtual FileDetails MainImage { get; set; }
    public virtual FileDetails AdditionalImages { get; set; }
    public virtual FileDetails Downloads { get; set; }

}


型号/FileDetails.cs

public class FileDetails
{
    public int Id { get; set; }
    public string FileName { get; set; }
    public string FileDir { get; set; }
    public string FileText { get; set; }

}


控制器/CompressorController.cs

    public async Task<IActionResult> Index()
    {
        var list = await _context.Compressor.ToListAsync();
        foreach (var compressor in list)
        {
            if (compressor.MainImage == null)
            {
                FileDetails img = new FileDetails(){FileDir = "", FileName =  "NoImage.png", FileText = ""};
                compressor.MainImage = img;
            }
        }
        return View(list);
    }


因此,有时它会在FileDetails表上进行联接,有时却不会。 Compressor表(继承了BaseProduct)具有FileDetails表的ID,因此看来我并没有做太多事情。

解决了:

问题似乎出在骑士身上。在Visual Studio中运行代码,并一直在使用它。

最佳答案

我无法弄清它有时如何应用联接,有时甚至不联接,但我很确定EF Core当前版本不支持延迟加载。因此,请尝试加载。

var list = await _context.Compressor
    .Include(x => x.MainImage)
    .ThenInclude(x => x.AdditionalImages)
    .ThenInclude(x => x.Downloads).ToListAsync();

09-25 19:55