我有一个实体模型如下:
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}} ..我无法将其用于Activity
和Action
,因为它会映射Command
类的EntitySetName
{ {1}}因此,如果我将其用于Entity
或Activity
,则会引发错误。我该如何管理?
答案 0 :(得分:2)
在EF5或更高版本中,可以实现具有多个结果集的存储过程。这是详细答案的链接
答案 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;
}