【问题标题】:Entity Framework Core Joining Related Table实体框架核心加入相关表
【发布时间】:2018-01-05 03:16:35
【问题描述】:

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

Models/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; }

}

Controllers/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,所以看起来我并没有搞砸太多。

已解决:

问题似乎与 Rider 有关。在 Visual Studio 中运行代码并始终使用它。

【问题讨论】:

  • 我想说的是你所想的延迟加载在 2.0.1 版本中不存在,预计在 2.1 中,这些位实际上在 github 中,他们最近发布了关于它们

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


【解决方案1】:

我不知道它如何应用 join 有时有时不,但我很确定 EF Core 当前版本不支持延迟加载。所以,尝试急切加载;

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

【讨论】:

  • 我确实尝试过类似的方法。我只做了第一个包含,当我调试时,我得到错误未知标识符:list2。此外,当我执行 ThenIncludes 时,它查看的是 FileDetails,而不是 Compressor。
  • “我得到错误未知标识符:list2”这是什么意思?你能提供一些细节吗?
  • 是的..我也不明白。但我添加了 var list2 = await _context.Compressor.Include(x => x.MainImage).ToListAsync();这就是当我尝试调试并查看返回的内容时,Rider 给我的错误。也许这是 Rider 的问题,我将在 Visual Studio 中尝试该代码,看看会发生什么。
【解决方案2】:

我按照 Rainman 的建议修改了我的代码,但仍然无法正常工作。

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

我使用 Visual Studio 而不是 Rider 运行代码,它似乎运行得相当一致。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-04
    • 1970-01-01
    • 1970-01-01
    • 2020-07-08
    • 2021-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多