Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
asp.net-具有关系数据的LINQ查询_Asp.net_Linq_Entity Framework 6 - Fatal编程技术网

asp.net-具有关系数据的LINQ查询

asp.net-具有关系数据的LINQ查询,asp.net,linq,entity-framework-6,Asp.net,Linq,Entity Framework 6,我有两个表类别和文件。查看图片中的关系 我编写了以下查询,根据关系从两个表中选择数据 public List<DocumentViewModel> All() { var docs = _context.Document.ToList(); List<DocumentViewModel> docList = docs.Select(x => new DocumentViewModel

我有两个表类别和文件。查看图片中的关系

我编写了以下查询,根据关系从两个表中选择数据

public List<DocumentViewModel> All()
        {
            var docs  = _context.Document.ToList();
            List<DocumentViewModel> docList = docs.Select(x => new DocumentViewModel
            { DocumentId = x.DocumentId,
              DocumentPath = x.DocumentPath,
              CategoryId = x.CategoryId,
              CategoryName = x.Category.CategoryName }).ToList();
            return docList;

        }
这是我的情态动词

文件
知道我在哪里犯错了吗

在这种情况下,没有理由在内存中获取一个列表,然后执行投影,您可以直接从EF执行此操作。即使没有定义关系,如果您对结果进行投影,EF也会为
CategoryName
返回
null
。如果您首先进入内存,则如果没有类别关系,则需要NRE

public List<DocumentViewModel> All()
{
    return _context.Document.Select(x => new DocumentViewModel
        { DocumentId = x.DocumentId,
          DocumentPath = x.DocumentPath,
          CategoryId = x.CategoryId,
          CategoryName = x.Category.CategoryName}).ToList();
}
public List All()
{
return\u context.Document.Select(x=>newdocumentviewmodel
{DocumentId=x.DocumentId,
DocumentPath=x.DocumentPath,
CategoryId=x.CategoryId,
CategoryName=x.Category.CategoryName}).ToList();
}

它失败的最初原因

  • 至少有一个实体与类别没有对应关系
  • 您没有启用延迟加载(这是一件好事),如果是这种情况,您应该使用
    Include
    返回关系

  • 这意味着您的数据完整性有缺陷。签入孤立文档的数据(没有相应的类别)。
    public class Document
        {
            [Key]
            public int DocumentId { get; set; }
            [Required]
            public string DocumentPath { get; set; }
            public Nullable<int> CategoryId { get; set; }
            public virtual Category Category { get; set; }
        }
    
    public class Category
        {
    
            [Key]
            public int CategoryId { get; set; }
            [Required]
            public string CategoryName { get; set; }
            public virtual ICollection<Document> Documents { get; set; }
        }
    
     public class DocumentViewModel
        {
            public int DocumentId { get; set; }
            public string DocumentPath { get; set; }
            public int? CategoryId { get; set; }
            public string CategoryName { get; set; }
        }
    
    public List<DocumentViewModel> All()
    {
        return _context.Document.Select(x => new DocumentViewModel
            { DocumentId = x.DocumentId,
              DocumentPath = x.DocumentPath,
              CategoryId = x.CategoryId,
              CategoryName = x.Category.CategoryName}).ToList();
    }