gpt4 book ai didi

stored-procedures - Entity Framework CTP5 - 从存储过程中读取多个记录集

转载 作者:行者123 更新时间:2023-12-04 02:08:32 25 4
gpt4 key购买 nike

在 EF4 中,这不容易实现。您要么必须降级到经典的 ADO.NET (DataReader),请使用 ObjectContext.Translate 或使用 EF 扩展 项目。

这是否已在 EF CTP5 中现成实现?

如果没有,推荐的这样做的方法是什么?

我们是否必须投 DbContext<T>作为 IObjectContextAdapter并访问底层 ObjectContext为了达到这个方法?

有人可以给我指出一篇关于使用 EF CTP5 执行此操作的好文章吗?

最佳答案

所以我得到了这个工作,这就是我所拥有的:

internal SomeInternalPOCOWrapper FindXXX(string xxx)
{
Condition.Requires(xxx).IsNotNullOrEmpty();

var someInternalPokey = new SomeInternalPOCOWrapper();
var ctx = (this as IObjectContextAdapter).ObjectContext;

var con = new SqlConnection("xxxxx");
{
con.Open();
DbCommand cmd = con.CreateCommand();
cmd.CommandText = "exec dbo.usp_XXX @xxxx";
cmd.Parameters.Add(new SqlParameter("xxxx", xxx));

using (var rdr = cmd.ExecuteReader())
{
// -- RESULT SET #1
someInternalPokey.Prop1 = ctx.Translate<InternalPoco1>(rdr);

// -- RESULT SET #2
rdr.NextResult();
someInternalPokey.Prop2 = ctx.Translate<InternalPoco2>(rdr);

// -- RESULT SET #3
rdr.NextResult();
someInternalPokey.Prop3 = ctx.Translate<InternalPoco3>(rdr);

// RESULT SET #4
rdr.NextResult();
someInternalPokey.Prop4 = ctx.Translate<InternalPoco4>(rdr);
}
con.Close();
}

return someInternalPokey;
}

本质上,它基本上就像经典的 ADO.NET。您阅读了 DbReader ,前进到下一个结果集,等等。

但至少我们有 Translate方法似乎在结果集字段和提供的实体之间从左到右。

请注意,该方法是内部的。

我的 Repository 调用这个方法,然后 水合物 DTO 到我的域对象中。

我对它不是 100% 满意,原因有 3 个:
  • 我们必须投 DbContextIObjectContextAdapter .方法Translate应该在 DbContext<T>类 IMO。
  • 我们必须使用经典的 ADO.NET 对象。为什么?存储过程是一个 必须有 对于任何 ORM。我对 EF 的主要提示是缺乏存储过程支持,这似乎没有被 EF CTP5 纠正。
  • 您必须打开一个新的 SqlConnection。为什么它不能使用与 EF 上下文打开的连接相同的连接?

  • 希望这既可以帮助某人,也可以向 EF 团队发送消息。我们需要现成的 SPROCS 的多个结果支持。您可以将存储过程映射到复杂类型,那么为什么我们不能将存储过程映射到多个复杂类型呢?

    关于stored-procedures - Entity Framework CTP5 - 从存储过程中读取多个记录集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5253328/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com