我能复制一些我敢打赌的事情,这不是真的:-) 基于Entity-Framework-5的应用程序从存储过程结果填充名为“dbSetName”的实体,如下所示:
DbContext.Database.Initialize(false);
IDbCommand cmd = DbContext.Database.Connection.CreateCommand();
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = sprocName;
DbContext.Database.Connection.Open();
using (DbDataReader reader = (DbDataReader)cmd.ExecuteReader())
{
var tmpresult = ((IObjectContextAdapter)this.DbContext).ObjectContext.Translate<T>(reader, dbSetName, MergeOption.AppendOnly);
读者是SqlDataReader
。 DbContext派生自System.Data.Entity.DbContext - 没什么特别的。
当我在SSMS中执行时,存储过程输出会吐出一个单独的集合 - 它的主体中第一个也是唯一的独立SELECT的结果。它包含3383条记录。
当枚举时,tmpresult的内容由3383条记录组成,但是一致且无明显原因,我在原始输出中看到的一些记录被原始输出中的重复记录替换。
例如, RAW 输出看起来像这样
行值
但是tmpresult的结果始终如此:
行值
我可以在调试器中停下来,检查并确保我对EF使用的相同SQL服务器/数据库/ sproc执行原始... 奇怪......
不确定要显示的其他信息,但我希望有人可以解释一下。
附加信息:用Objectcontext.translate<T>
替换SqlQuery<T>
可解决此问题。那么我现在调试任何程序集实现Objectcontext.translate<T>
?