2010-07-08 178 views
0

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

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

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

非常感谢

回答

0

如果您不能返回足够的数据来完全实现实体 - 和ID字段是肯定将被要求为 - ,那么你需要改变返回类型上过程是一个复杂的类型,而不是一个实体。

+0

感谢您的答复克雷格。我们基本上试图做的是仅仅从一个不同的数据库表添加一个Candidate到上下文,所以通过直接映射到存储的proc和函数导入,它使我们不必从函数返回的复杂类型映射到候选实体在代码中。 如果这就是我们所要做的,那就没问题,但是看起来奇怪的是,当EF知道sp的返回模式并且知道它永远不会对候选者进行工作时,EF将允许我绑定到候选实体。这导致我相信我们错过了一些东西。 – 2010-07-09 19:00:20

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才能正常工作。