我有一个项目首先使用实体框架代码。
由于各种原因,其中一个linq查询执行得不好,我想用存储过程调用替换它。
以下代码适用于调用存储过程并将结果转换为List。
IEnumerable<Activity> activities =
((IObjectContextAdapter)MyContext)
.ObjectContext.ExecuteStoreQuery<Activity>("GetActivities").ToList();
但是我还想在活动模型上添加一些包含该对象的子集合之一。例如,Activity具有虚拟列表集合。我可以在存储过程中为每个活动返回标记。
如果我这样做,则无效
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
C#中的错误表明它不是有效的活动。如果我从存储过程中删除了Tags位,那么它只是从Activities表中选择它可以正常工作。
我不确定使用实体框架的存储过程是否可以提出我的要求。如果不是,我可能不得不求助于使用SqlCommand并从我的结果集中构建模型。
答案 0 :(得分:2)
这是不可能的。自动实体填充仅适用于扁平对象=您可以填充Activity
但不能填充其关系。如果要加载关系,则必须使用标准ADO.NET,但在这种情况下,最好修改存储过程以返回每个表的单独结果集,以减少传输的数据量。