Include语句不适用于LINQ查询

本文关键字:LINQ 查询 适用于 不适用 语句 Include | 更新日期: 2023-09-27 18:27:20

试图使用从开发人员构建的现有数据库表派生的模型来解决MVC项目的一些问题,但这些表都没有设置关系(它们都有主键,只是没有关系)。因此,当需要多个表时,该项目使用ViewModels来完成一些事情。

我试图通过添加必要的项目来关联其中两个表来解决这个问题。

表一的POCO:

namespace Project.Models
{
    using System;
    using System.ComponentModel.DataAnnotations;
    public partial class Table_One
    {
        [ScaffoldColumn(false)]
        public short ID { get; set; }
        [Display(Name="Name")]
        public string NAME { get; set; }
        [Display(Name = "Owner")]
        public string OWNER { get; set; }
        [Display(Name = "Property")]
        public Nullable<decimal> PROPERTY { get; set; }
        public virtual Table_Two Table_Two { get; set; }
    }
}

表二的POCO:

namespace Project.Models
{
    using System.Collections.Generic;
    using System.ComponentModel.DataAnnotations;
    public partial class Table_Two
    {
        public Table_Two()
        {
            this.Table_One = new HashSet<Table_One>();
        }
        [ScaffoldColumn(false)]
        public short ID { get; set; }
        [Display(Name="Property")]
        [MaxLength(20)]
        public string Property { get; set; }
        public ICollection<Table_One> Table_One { get; set; }
    }
}

如果这些表设置了它们的关系,它们就会在Property值上连接(我已经清理了表名和属性)。据我所知,我已经将事情设置为镜像我一直在处理的另一个项目的方式,该项目具有相关的表,并且已经设置为包括关系,但当我运行这个LINQ查询时:

var model = context.Table_One.Include(t => t.Table_Two);

我收到以下错误消息:

"指定的Include路径无效。EntityType"X.Table_One"未声明名为"Table_Two"的导航属性。"

最初,这些是通过LINQ查询连接的,该查询使用查询语法将表的每个属性选择到ViewModel的属性中。

我试过删除include,但这与控制器中的其他代码不一致。我尝试过将ICollection更改为IList,但没有成功。我在这里搜索了其他答案,但似乎没有一个能解决我的问题。

据我所知,启动该项目的开发人员使用针对项目中的EDMX运行的代码生成工具构建了POCO。在这一点上,我唯一能想到的就是让开发人员添加关系,然后更新POCO,通过EDMX拉入更新的表。

我还应该指定Table_Two中的ID将是Table_One的PROPERTY列中的外键。

Include语句不适用于LINQ查询

您应该将Include与作为相关实体集合的属性一起使用

var model = context.Table_Two.Include(t => t.Table_One);

Include试图通过在sql查询上使用联接来获取相关实体的集合。

如果你想加载一个相关的实体,你可以使用惰性加载或使用下面的代码加载它

context.Entry(table_one).Reference(x => x.Table_Two).Load();

要依赖实体框架的相关实体加载,需要设置实体关系。

由于您说了"但这些表都没有设置其关系",您将无法使用或懒惰,也无法急于加载,您必须手动获取其他实体。