所以我得到這個工作,這是我有:
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到我的域對象。
我不是3個原因,100%滿意的:
- 我們要投的
DbContext
爲IObjectContextAdapter
。方法Translate
應該在DbContext<T>
類IMO上。我們不得不使用經典的ADO.NET對象。爲什麼?對於任何ORM,存儲過程是必須有。我對EF的主要抱怨是缺乏存儲過程支持,這似乎還沒有通過EF CTP5糾正。
- 你必須打開一個新的SqlConnection。爲什麼它不能使用與EF上下文打開的連接相同的連接?
希望這可以幫助某人並向EF團隊發送消息。我們需要對現成的SPROCS提供多種結果支持。您可以將存儲的proc映射到複雜類型,那麼爲什麼我們不能將存儲的proc映射到多個複雜類型的?
沒有人得到任何東西? =( – RPM1984 2011-03-10 22:19:30