在EF4中,这不容易实现。你要么降级到经典的ADO.NET(DataReader),请使用 ObjectContext.Translate 或使用 EFExtensions 项目。
这是在EF CTP5中实现的吗?
如果没有,推荐的方法是什么?
我们必须施展 DbContext<T>
作为一个 IObjectContextAdapter
并访问底层 ObjectContext
为了得到这个方法?
有人能指点我用EF CTP5做一篇好文章吗?
在EF4中,这不容易实现。你要么降级到经典的ADO.NET(DataReader),请使用 ObjectContext.Translate 或使用 EFExtensions 项目。
这是在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
看似在结果集字段和提供的实体之间从左到右的方法。
注意该方法是内部的。
然后,我的存储库调用此方法 水合物 DTO进入我的域对象。
我不是百分之百满意,原因有以下几点:
DbContext
如 IObjectContextAdapter
。方法 Translate
应该是 DbContext<T>
IMO课程。希望这有助于某人并向EF团队发送消息。我们需要为SPROCS提供多种结果支持。您可以将存储过程映射到复杂类型,因此我们为什么不能将存储过程映射到 多种复杂类型?