Stored procedures 如何首先从EF代码中的存储过程填充包含子集合的模型
我有一个项目首先使用实体框架代码 出于各种原因,其中一个linq查询的性能不好,我想用一个存储过程调用来替换它 下面的代码可以很好地用于调用存储过程并将结果转换为列表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(); 它在
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