将一对多关系SQL表中的数据读入我的模型

时间:2017-06-09 01:33:25

标签: c# entity-framework

我有两个代表我的SQL表的类(由ADO.net实体数据模型生成):

public partial class Parent
{
    public Parent()
    {
        this.Students = new HashSet<Student>();
    }

    public int Parent_Id { get; set; }
    public string Parent1_Last_Name { get; set; }
    public string Parent1_First_Name { get; set; }
    public virtual ICollection<Student> Students { get; set; }
}

public partial class Student
{
        public int Student_Id { get; set; }
        public string Student_Last_Name { get; set; }
        public string Student_First_Name { get; set; }
        public int Parent_Id { get; set; }
        public virtual Parent Parent { get; set; }
}

现在我试图通过以下方法从表中读取数据:

var parent = new Parent();
var students = new List<Student>();

using (var dc = new SchoolDataEntities())
{
    students = dc.Students.Where(s => s.Parent_Id.Equals(parentId)).ToList();
    parent = dc.Parents.Where(p => p.Parent_Id.Equals(parentId));
    parent.Students = students;     
}

当我从Parent表(Students表工作正常时)我收到运行时“无效转换”异常错误。

  

错误:System.InvalidCastException:'无法将类型为'System.Data.Entity.Infrastructure.DbQuery`1 [SchoolApplication.Parent]'的对象强制转换为'SchoolApplication.Parent'。'

有人请告诉我我做错了什么吗?

2 个答案:

答案 0 :(得分:0)

这部分是你的问题:

parent = (Parent)dc.Parents.Where(p => p.Parent_Id.Equals(parentId));

&#34;其中&#34;的输出是父母的集合,而不仅仅是单亲。

你可以使用&#34; Single&#34;或者&#34;第一&#34;而不是&#34;哪里&#34;在这种情况下。

答案 1 :(得分:0)

此部分代码返回IQueryable集合而不是单Parent个模型:

parent = dc.Parents.Where(p => p.Parent_Id.Equals(parentId));

出于这个原因,您需要使用ParentFirstOrDefault()将查询具体化为SingleOrDefault()模型:

parent = dc.Parents.Where(p => p.Parent_Id.Equals(parentId)).FirstOrDefault();

parent = dc.Parents.Where(p => p.Parent_Id.Equals(parentId)).SingleOrDefault();

相关:Unable to cast object of type 'System.Data.Entity.Infrastructure.DbQuery`1[]' using linq lambda expression