我有一个非常简单的存储过程,它返回多个记录集。所有记录集都有别名列,所以它们看起来都一样。
E.g。
SELECT TOP 10 FooId AS Id, Name As Name FROM Foos
SELECT TOP 10 BarId AS Id, Name As Name FROM Bars
...
对于我的EF设置,我正在使用POCO并拥有自己的DataContext(无代码生成)。
现在,我使用详细here的技术创建了“功能导入”。
但问题是,它正在创建一个包含Id和Name的复杂类型,而不是一个可以容纳Id和Name的多个集合的类型。 EF无法检测到我正在返回多个记录集吗?
因此存储的proc正确执行,但是返回的唯一记录来自第一个select语句,其他记录被丢弃。所以我只能找回10条记录。
以下是我在自定义DataContext中执行SPROC的方法:
public ObjectResult<SomeSimpleProc_Result> GetSomeStuff()
{
return base.ExecuteFunction<SomeSimpleProc_Result>("SomeSimpleProc);
}
返回结果POCO:
public class SomeSimpleProc_Result
{
#region Primitive Properties
public int Id
{
get;
set;
}
public string Name
{
get;
set;
}
#endregion
}
最终结果是我想要一个在其中有0- *对象的对象(在上面的例子中,3个对象)。每个对象都应该有一组简单的对象(Id,Name)。
我认为问题肯定在于“功能导入”的自定义。我该如何创建复杂类型?或者我应该使用“返回实体集合”。
有什么想法吗?
答案 0 :(得分:4)
我认为开箱即用不支持多个resut集。 Here是关于在EF v1中使用它们的博客文章。 EF v4也不直接支持它们 - 这个article中的注释包含Danny Simmons的以下声明(他曾经是EF和Linq-To-Sql的开发经理):
不幸的是我们无法得到 完全支持多个结果 这次的产品。我们做到了, 但是,添加方法Translate 到允许你的ObjectContext 从DataReader中实现对象。 ...
编辑:为了使这一点更新:EF 4.5(.NET 4.5 + VS2012)supports stored procedures with multiple result sets但至少在Beta中看起来支持没有在UI中实现,EDMX验证也抱怨一些问题,但在运行时它正常工作。