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

本文关键字:结果 问题 实体 存储过程 读取 | 更新日期: 2023-09-27 18:11:34

我们使用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 '的异常。InvalidOperationException'发生在System.Data.Entity.dll,但在用户代码

中未处理

附加信息:EntitySet名称"MyDbContext"。MyEntity"无法找到。

显然它添加了一些上下文名称作为前缀到EntitySet名称而不是MyEntity在寻找MyDbContext。

导致这种行为的原因以及是否有任何解决方法(因为在我上面引用的示例中,它看起来非常直接和简单,不需要特定的操作,除了调用db.Database。)初始化(力量:假);(我在我的代码中也这样做)

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

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

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

我自己找到了答案当调用Translate

时,似乎表别名不起作用,实体类和表名之间的代码优先映射配置也没有考虑在内。

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

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