Sql 在实体框架6中,如何从存储过程接收实体以及相关实体?

Sql 在实体框架6中,如何从存储过程接收实体以及相关实体?,sql,entity-framework,stored-procedures,entity-framework-6,Sql,Entity Framework,Stored Procedures,Entity Framework 6,假设我有以下(在更复杂的情况下是真实情况)CLR对象: class Student { public int Id {get;set;} public int Age {get;set;} public string Name {get;set;} public ICollection<Grade> Grades {get;set;} } class Grade { public int Id {get;set;} public in

假设我有以下(在更复杂的情况下是真实情况)CLR对象:

class Student {
    public int Id {get;set;}
    public int Age {get;set;}
    public string Name {get;set;}
    public ICollection<Grade> Grades {get;set;}
}

class Grade {
    public int Id {get;set;}
    public int Grade {get;set;}
    public string Course {get;set;}      

    public virtual Student Student {get;set;}
    public int StudentId {get;set;}
}
我如何执行实体框架中的查询,以使结果值成为学生的集合,并填充他们的
成绩
集合


显然,这可以通过使用实体框架实体直接实现,但实际情况要复杂得多,生成的EF查询所需的时间是实现相同查询的存储过程的100多倍。我唯一的问题是当数据返回时如何接收数据,只是好奇:存储的过程是否导入到EF DbContext中? 此存储过程的结果将是一个复杂的结果,在本例中是一个包含学生属性(Id、年龄和姓名)以及年级属性(Id、年级、课程、学生Id)的对象。 对于每个等级,您将从存储的过程中收到一条单独的记录,该记录映射到复杂的结果,即对象

为了获得每个学生都有自己的成绩集合的学生列表,将结果对象分组,例如

query = StoredProcResults.GroupBy(res => res.StudentId);

您的回答假设我已经有一个由强类型实体组成的StoredProcResults集合。但是你忽略了真正的问题。如何获取存储过程的结果以填充我的.net实体?很抱歉给您带来不便,Guy。在EF模型中导入存储过程:右键单击设计器,选择“添加”,然后在下面。。。要导入EF模型中的存储过程:打开EF模型设计器,右键单击设计器,选择“从数据库更新模型”,在“存储过程”下的“添加”选项卡中选择存储过程;确保选中“将选定的存储过程和函数导入实体模型”,单击“完成”,然后保存这些更改。保存将执行实际导入。假设我编写的是我的存储过程。在这种情况下,您可以在DbContext的ObjectContext(((IObjectContextAdapter)DbContext.ObjectContext)上使用ObjectResult ExecuteStoreQuery(string commandText,params object[]parameters)。commandText是存储过程的名称,params集合包含存储过程的任何参数。TElement是一个C#对象,您需要将结果映射到它。
query = StoredProcResults.GroupBy(res => res.StudentId);