原始SQL结果有它,ObjectContext.Translate <t>的结果不是</t>

时间:2014-08-13 23:50:05

标签: sql sql-server entity-framework entity-framework-5 sqldatareader

我能复制一些我敢打赌的事情,这不是真的:-) 基于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 输出看起来像这样

行值

  1. 1.1 1.2 1.3
  2. 2.1 2.2 2.3
  3. 3.1 3.2 3.3
  4. 4.1 4.2 4.3
  5. 5.1 5.2 5.3 ...
  6. 但是tmpresult的结果始终如此:

    行值

    1. 1.1 1.2 1.3
    2. 2.1 2.2 2.3
    3. 3.1 3.2 3.3
    4. 2.1 2.2 2.3
    5. 5.1 5.2 5.3 ...
    6. 我可以在调试器中停下来,检查并确保我对EF使用的相同SQL服务器/数据库/ sproc执行原始... 奇怪......

      不确定要显示的其他信息,但我希望有人可以解释一下。

      附加信息:用Objectcontext.translate<T>替换SqlQuery<T>可解决此问题。那么我现在调试任何程序集实现Objectcontext.translate<T>

0 个答案:

没有答案