包含不使用LINQ查询的语句

时间:2015-12-17 14:15:38

标签: c# .net linq asp.net-mvc-4 entity-framework-5

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

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

表1的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; }
    }
}

如果这些表格与他们的关系建立起来,他们就会加入属性值(我已经清理了表名和属性)。据我所知,我已经设置了镜像我正在处理的另一个项目,其中有相关的表,已经设置为包含关系,但是当我运行这个时LINQ查询:

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

我收到以下错误消息:

  

&#34;指定的包含路径无效。 EntityType&#39; X.Table_One&#39;   不会声明一个名为&#39; Table_Two&#39;的导航属性。&#34;

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

我已经尝试删除了include,但是它并没有与控制器中的其他代码一起使用。我尝试将ICollection更改为IList无济于事。我在这里搜索了其他答案,但似乎没有一个能解决我遇到的问题。

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

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

2 个答案:

答案 0 :(得分:0)

您应该将Include用于属于相关实体集合的属性

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

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

如果要加载相关实体,可以使用延迟加载或使用下面的代码

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

答案 1 :(得分:0)

要依赖Entity Framework的related entities loading,您需要设置实体关系。

由于您说“但这些表中没有一个设置了它的关系”,您既不能使用也不能懒惰,也不能手动获取其他实体。