Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Stored procedures 如何首先从EF代码中的存储过程填充包含子集合的模型_Stored Procedures_Entity Framework 4_Ef Code First - Fatal编程技术网

Stored procedures 如何首先从EF代码中的存储过程填充包含子集合的模型

Stored procedures 如何首先从EF代码中的存储过程填充包含子集合的模型,stored-procedures,entity-framework-4,ef-code-first,Stored Procedures,Entity Framework 4,Ef Code First,我有一个项目首先使用实体框架代码 出于各种原因,其中一个linq查询的性能不好,我想用一个存储过程调用来替换它 下面的代码可以很好地用于调用存储过程并将结果转换为列表 IEnumerable<Activity> activities = ((IObjectContextAdapter)MyContext) .ObjectContext.ExecuteStoreQuery<Activity>("GetActivities").ToList(); 它在

我有一个项目首先使用实体框架代码

出于各种原因,其中一个linq查询的性能不好,我想用一个存储过程调用来替换它

下面的代码可以很好地用于调用存储过程并将结果转换为列表

IEnumerable<Activity> activities =
    ((IObjectContextAdapter)MyContext)
       .ObjectContext.ExecuteStoreQuery<Activity>("GetActivities").ToList();
它在C#中出错,说这不是一个有效的活动。如果我从存储过程中删除标记位,使其只从Activities表中进行选择,则效果良好


我不确定使用实体框架的存储过程是否可以满足我的要求。如果没有,我可能不得不求助于使用SqlCommand并根据我自己的结果集构建模型。

这是不可能的。自动实体填充仅适用于平面对象=可以填充
活动
,但不能填充其关系。如果还想加载关系,则必须使用标准ADO.NET,但在这种情况下,最好修改存储过程,为每个表返回单独的结果集,以减少传输的数据量。

如果使用ADO.NET路径,我会让存储过程首先返回平面活动然后生成平面标记的结果集,并使用C#将它们组合在一起。听起来怎么样?您还需要连接表中的结果集来知道如何将它们组合在一起,不是吗?我可能会将活动ID添加到返回的每个标记记录中,以保存返回的额外结果集,但听起来我们的想法是一致的。谢谢
SELECT
   Activities.ID,
   Activities.Name,
   Tags.ID,
   Tags.Name
FROM
   Activities
   LEFT JOIN ActivityTags ON ActivityTags.ActivityID = Activities.ID
   LEFT JOIN Tags ON Tags.ID = ActivityTags.TagID