在EF 5或EF 6 CodeFirst中映射多个结果集存储过程
本文关键字:EF 结果 存储过程 映射 CodeFirst | 更新日期: 2024-09-21 23:07:12
我有一个如下的实体模型:
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或EF6 Codefirst中映射前面提到的存储过程的结果集?我已经使用了ObjectContext.Translate
方法,MSDN的文章《具有多个结果集的存储过程》中对此进行了解释。
但问题是,我所有的实体都是从Entity
类派生的,这就是为什么当我使用ObjectContext.Translate
代替Activity
。。我不能将它用于Action
和Command
,因为它将Entity
类的EntitySetName
映射到Activity
,所以如果我将其用于Action
或Command
,它将引发错误。我该怎么办?
在EF5或更高版本中,具有多个结果集的存储过程是非常可能的。这是详细答案的链接
具有多个结果集的存储过程
这是IDataReader 的扩展
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;
}