尝试从存储过程读取多列实体结果集时出现问题

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

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

但是,假设我的商店程序包含这样的查询

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

和C#中的代码是

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

我正在这一点上

System.Data.Entity.dll中出现“System.InvalidOperationException”类型的exception,但未在用户代码中处理

其他信息:找不到EntitySet名称“MyDbContext.MyEntity”。

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

导致此行为的原因以及是否存在任何workaroud(因为在上面引用的示例中,它看起来相当简单且不需要特定的操作,除了调用db.Database.Initialize(force:false);(我在我的代码中执行以及)

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

 var entities_1 = Context.ObjectContext.Translate(reader); reader.NextResult(); var entities_2 = Context.ObjectContext.Translate(reader); 

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

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

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