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

4
我们使用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<MyEntity>(reader, "MyEntity", MergeOption.AppendOnly);

我理解的意思是:

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

其他信息:无法找到实体集名称“MyDbContext.MyEntity”。

显然,它将某些上下文名称作为前缀添加到EntitySet名称中,而不是寻找结果集中的MyEntity。
这种行为的原因是什么?是否有任何解决方法(因为在我引用的示例中,它看起来非常简单明了,除了调用db.Database.Initialize(force:false)之外不需要进行任何特定的操作(我在我的代码中也这样做)
2个回答

6

我遇到了同样的异常,即使我在选择函数中没有使用别名。 最终我使用了Translate的重载方法,只传递了读取器。我已经知道选择函数的顺序,所以不需要传递EntitySet名称。

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

3

我自己找到了答案。似乎表别名不起作用,而且当你调用Translate时,实体类和表名之间的代码映射配置也不会被考虑在内。

因此,在这行代码中,我需要指定原始表名(MyEntities)而不是MyEntity。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接