存储过程映射实体框架

时间:2010-07-08 20:24:32

标签: entity-framework stored-procedures mapping

我们在EF4模型中使用功能导入来填充模型中的现有实体。模型中的实体具有Id的Key字段,我们正在努力映射,因为我们的存储过程不返回Id字段。我已经尝试将映射中的值设置为文字值0但是失败并出现EntityCommandExecutionException和以下异常文本。

数据阅读器与指定的“候选人”不兼容。类型为“Id”的成员在数据阅读器中没有相应的具有相同名称的列。

如果没有修改存储过程以返回虚拟Id字段,那么任何人都可以推荐最佳方法,因为虚拟字段选项对我来说非常笨重。

非常感谢

2 个答案:

答案 0 :(得分:0)

如果您无法返回足够的数据来完全实现实体 - 并且Id字段肯定将是必需的 - 那么您需要更改proc上的返回类型是一个复杂的类型而不是一个实体。

答案 1 :(得分:0)

使用具有相同结构的另一个POCO类来接收存储过程调用的结果,这是一个示例:

string sp = string.Format("EXEC dbo.spComercialesAsociadosActivos {0}", idComercialPrincipal);
return ((IObjectContextAdapter)this).ObjectContext.ExecuteStoreQuery<InfoComercial>(sp);

在这种情况下,“InfoComercial”是一个POCO类,其结构与“Comercial”相同,它首先与DBContext中的EF代码绑定,然后我在viewModel中使用这个独立的类来创建一个断开的“Comercial” ,它不是一个理想的解决方案,但在EF 5配备SP支持之前可以正常工作。