在EF 5或EF6 Code First中映射多个结果集存储过程

时间:2013-12-14 11:08:49

标签: c# entity-framework ef-code-first

我有一个实体模型如下:

public Entity
{
    //Properties
}

public Activity : Entity
{
    //Properties
    public Action Action { get; set; }
    public ICollection<Command> Commands { get; set; }
}

public Action : Entity
{
    //Properties
}

public Command : Entity
{
    //Properties
}

我有一个存储过程,它返回活动列表以及每个活动的相关操作和命令。如何在EF5或EF 6 Codefirst中映射前面提到的存储过程的结果集? 我已经在MSDN文章Stored Procedures with Multiple Result Sets中解释了ObjectContext.Translate方法。

但问题是我的所有实体都来自Entity类,这就是我使用时的原因 ObjectContext.Translate的{​​{1}} ..我无法将其用于ActivityAction,因为它会映射Command类的EntitySetName { {1}}因此,如果我将其用于EntityActivity,则会引发错误。我该如何管理?

2 个答案:

答案 0 :(得分:2)

在EF5或更高版本中,可以实现具有多个结果集的存储过程。这是详细答案的链接

Stored Procedure with Multple Result sets

答案 1 :(得分:1)

这适用于DataReader

的扩展
    public static List<T> MapTo<T>(this IDataReader dr)
    {
        var list = new List<T>();
        while (dr.Read())
        {
            var obj = Activator.CreateInstance<T>();
            foreach (var prop in obj.GetType().GetProperties())
            {
                if (!Equals(dr[prop.Name], DBNull.Value))
                {
                    prop.SetValue(obj, dr[prop.Name], null);
                }
            }
            list.Add(obj);
        }
        return list;
    }