实体框架核心加入相关表

时间:2018-01-05 03:16:36

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

我有一个带有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,所以看起来我没有搞砸太多。

解决:

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

2 个答案:

答案 0 :(得分:0)

我有时无法弄清楚它是如何应用连接的,有时候不是,但我很确定EF Core当前版本不支持延迟加载。所以,尝试急切加载;

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

答案 1 :(得分:0)

我修改了我的代码,类似于Rainman的建议,但那仍然没有用。

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

我使用Visual Studio而不是Rider运行代码,它看起来非常一致。

相关问题