从数据库中选择项目以及所有依赖项

时间:2014-01-09 10:53:09

标签: entity-framework

我尝试使用实体框架选择数据库中的所有项目以及所有依赖项。

我在选择时遇到以下错误 指定的包含路径无效。 EntityType'RequestModel.RequestType'未声明名为'FieldDefinitions,ListItems'的导航属性。

这是我的代码,我确信它的内容很简单。

    var reqs = new List<RequestType>();

    using (var db = new ITISS_RequestEntities())
    {

        reqs = db.RequestTypes.Include("FieldDefinitions,ListItems").ToList();
    }

这是我的模特

    public partial class RequestType
    {
        public RequestType()
        {
            this.Requests = new HashSet<Request>();
            this.FieldDefinitions = new HashSet<FieldDefinition>();
        }

        public int RequestType1 { get; set; }
        public string TypeDescription { get; set; }

        public virtual ICollection<Request> Requests { get; set; }
        public virtual ICollection<FieldDefinition> FieldDefinitions { get; set; }
    }

    public partial class FieldDefinition
    {
        public FieldDefinition()
        {
            this.EntryDefinitions = new HashSet<EntryDefinition>();
            this.ListItems = new HashSet<ListItem>();
            this.RequestTypes = new HashSet<RequestType>();
        }

        public int RequestField { get; set; }
        public string FieldName { get; set; }
        public string FieldReference { get; set; }
        public string ControlType { get; set; }

        public virtual ICollection<EntryDefinition> EntryDefinitions { get; set; }
        public virtual ICollection<ListItem> ListItems { get; set; }
        public virtual ICollection<RequestType> RequestTypes { get; set; }
    }

    public partial class ListItem
    {
        public ListItem()
        {
            this.FieldDefinitions = new HashSet<FieldDefinition>();
        }

        public int ListItemID { get; set; }
        public string ItemName { get; set; }

        public virtual ICollection<FieldDefinition> FieldDefinitions { get; set; }
    }

1 个答案:

答案 0 :(得分:0)

首先,您正在使用虚拟ICollections,因此无论如何都应该通过延迟加载提供所有内容。

如果你真的想强制整个树的一次加载,那么改变这个

reqs = db.RequestTypes.Include("FieldDefinitions,ListItems").ToList();

到这个

reqs = db.RequestTypes.Include("FieldDefinitions").Select("ListItems").ToList();

另外,如果你添加

using System.Data.Entity

到文件的顶部,您将能够使用强类型扩展方法进行包含.....因此......

reqs = db.RequestTypes.Include(rt => rt.FieldDefinitions).Select(fd => fd.ListItems).ToList();

实际上this是实体框架查询真正有用的页面