【问题标题】:Issue when trying to read multiplte entity resultsets from a stored procedure尝试从存储过程中读取多个实体结果集时出现问题
【发布时间】:2014-07-03 22:20:20
【问题描述】:

我们在 MS SQL Server 中使用 EF5.0 和代码优先方法 我读过一篇文章 http://msdn.microsoft.com/en-us/data/jj691402.aspx

并决定在我们的数据库上尝试相同的方法

但是,假设我的 stores 过程包含这样的查询

SELECT * from [dbo].[MyEntities] as MyEntity
    where ID = @ID

C# 中的代码是

var entities = Context.ObjectContext.Translate<MyEntity>(reader, "MyEntity", MergeOption.AppendOnly);

我已经明白了

“System.InvalidOperationException”类型的异常发生在 System.Data.Entity.dll 但未在用户代码中处理

附加信息:EntitySet 名称“MyDbContext.MyEntity” 找不到。

因此,显然它添加了一些上下文名称作为 EntitySet 名称的前缀,而不是 MyEntity 在结果集中寻找 MyDbContext.MyEntity。

是什么导致了这种行为以及是否有任何解决方法(因为在我上面引用的示例中,它看起来非常简洁和简单,并且不需要特定的操作,除了调用 db.Database.Initialize(force: false); (我这样做在我的代码中也是如此)

【问题讨论】:

    标签: c# sql-server entity-framework stored-procedures


    【解决方案1】:

    我有同样的例外,即使我没有在我的选择函数中使用别名。 我最终通过只传递阅读器来使用 Translate 的重载方法。我已经知道选择函数的顺序,所以我不需要传递 EntitySet 名称。

    var entities_1 = Context.ObjectContext.Translate<MyEntity_1>(reader);
    reader.NextResult();
    var entities_2 = Context.ObjectContext.Translate<MyEntity_2>(reader);
    

    【讨论】:

      【解决方案2】:

      好吧,我自己找到答案 如果似乎表别名不起作用并且实体类和表名之间的代码优先映射配置在您调用 Translate 时也没有考虑到

      所以我需要在这行代码中指定原始表名(MyEntities)而不是MyEntity

      var entities = Context.ObjectContext.Translate<MyEntity>(reader, "MyEntities", MergeOption.AppendOnly);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-04-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-06-04
        • 2021-12-11
        • 1970-01-01
        相关资源
        最近更新 更多