Entity framework 存储过程映射实体框架

Entity framework 存储过程映射实体框架,entity-framework,stored-procedures,mapping,Entity Framework,Stored Procedures,Mapping,我们在EF4模型中使用函数导入来填充模型中的现有实体。模型中的实体有一个Id键字段,我们正在努力映射它,因为我们的存储过程不返回Id字段。我已尝试将映射中的值设置为文本值0,但由于EntityCommandExecutionException和以下异常文本而失败 数据读取器与指定的“候选”不兼容。“Id”类型的成员在数据读取器中没有同名的对应列 除了修改存储过程以返回虚拟Id字段之外,任何人都可以推荐最好的方法,因为虚拟字段选项对我来说非常笨拙 非常感谢如果您无法返回足够的数据来完全具体化实体,

我们在EF4模型中使用函数导入来填充模型中的现有实体。模型中的实体有一个Id键字段,我们正在努力映射它,因为我们的存储过程不返回Id字段。我已尝试将映射中的值设置为文本值0,但由于EntityCommandExecutionException和以下异常文本而失败

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

除了修改存储过程以返回虚拟Id字段之外,任何人都可以推荐最好的方法,因为虚拟字段选项对我来说非常笨拙


非常感谢

如果您无法返回足够的数据来完全具体化实体,那么您需要将进程上的返回类型更改为复杂类型,而不是实体。

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

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

在本例中,“InfoCommercial”是一个结构与“Commercial”相同的POCO类,它首先在DBContext中绑定到EF代码,然后我在viewModel中使用这个独立类创建了一个断开连接的“Commercial”,这不是一个理想的解决方案,但在EF 5提供SP支持之前,它可以正常工作。

感谢Craig的回复。我们实际上要做的是从一个不同的DB表向上下文添加一个候选对象,这样通过直接映射到存储的proc和函数导入,我们就不必从函数返回的复杂类型映射到代码中的候选实体。如果这是我们必须做的,那也没关系,但奇怪的是,当EF知道sp的返回模式,因此知道它永远不会对候选实体起作用时,它会允许我绑定到候选实体。这让我相信我们错过了什么。