我目前正在使用asp.net mvc 4.5和EF5 Beta 2进行编码,我有一个存储过程,它返回多个结果集。我发现this site并且它说新版本(我正在使用)已经支持多个结果集。
现在我似乎无法找到支持。因为我完全不熟悉EF,所以我希望我没有做错事。
我的数据库中没有相应的实体来创建结果集。
答案 0 :(得分:4)
核心EF库支持多结果集过程。不幸的是,设计师没有 - 并且不清楚它是否会在发布时发布。
我也发现文档有点稀疏,特别是对于返回多个实体类型(而不是复杂类型)。幸运的是,手动编辑EDMX并不太复杂。我写了一篇关于主题的博客文章......
Entity Framework 5 – Multiple Entity-Typed Result Sets from a Stored Procedure(请注意,我的服务器可能需要几分钟时间才会启动磁盘,因为没有太多人在管理我那简陋的小博客)。
缺点是在CSDL部分..
<edmx:ConceptualModels>
<Schema Namespace="myModel" ...>
<EntityContainer Name="myModelEntities" ....>
......
<!--
this is what “function import” wrote, that I’m overwriting…
FunctionImport Name="MyMARS_Proc" ReturnType="Collection(myModel.Table_A)"/>
-->
<FunctionImport Name="MyMARS_Proc" >
<ReturnType Type="Collection(myModel.Table_A)" EntitySet="Table_As"/>
<ReturnType Type="Collection(myModel.Table_B)" EntitySet="Table_Bs"/>
</FunctionImport>
然后在MSL(C-S Mapping部分)中你想要......
<edmx:Mappings>
<Mapping Space="C-S" ....>
<EntityContainerMapping ....>
<FunctionImportMapping FunctionImportName="MyMARS_Proc"
FunctionName="myModel.Store.MyMARS_Proc">
<ResultMapping>
<EntityTypeMapping TypeName="myModel.Table_A"/>
</ResultMapping>
<ResultMapping>
<EntityTypeMapping TypeName="myModel.Table_B"/>
</ResultMapping>
</FunctionImportMapping>
答案 1 :(得分:1)
这是一个非常有趣的问题。我玩了.NET 4.5 Beta / VS11 Beta一段时间,我有两个观察结果:
ResultMapping
映射不同的结果集,而每个ResultMapping
只能映射单个结果集修改强>
我错了。它在运行时工作。只有设计师抱怨EDMX验证,但MSL本身接受多个ResultMapping
元素。问题中链接的原始演练仍然有效。
答案 2 :(得分:0)
我做了这段代码
程序如下
alter procedure dbo.proc_getmorethanonetable
as
select * from dbo.Orders
select * from dbo.Items
select *
from dbo.Users u
inner join dbo.Orders o
on o.User_ID = u.User_ID
go
守则如此简单 我们走了
using (var db = new EF_DEMOEntities())
{
var cmd = db.Database.Connection.CreateCommand();
cmd.CommandText = "[dbo].[proc_getmorethanonetable]";
try
{
db.Database.Connection.Open();
using (var reader = cmd.ExecuteReader())
{
var orders =
((IObjectContextAdapter)db).ObjectContext.Translate<Order>(reader);
GridView1.DataSource = orders.ToList();
GridView1.DataBind();
reader.NextResult();
var items =
((IObjectContextAdapter)db).ObjectContext.Translate<Item>(reader);
GridView2.DataSource = items.ToList();
GridView2.DataBind();
}
}
finally
{
db.Database.Connection.Close();
}
}
在这里你去:)