代码之家  ›  专栏  ›  技术社区  ›  Darren Lewis

存储过程映射实体框架

  •  0
  • Darren Lewis  · 技术社区  · 14 年前

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

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

    除了修改存储过程以返回一个虚拟ID字段之外,任何人都可以推荐这种最佳方法是什么,因为虚拟字段选项对我来说非常笨拙。

    多谢

    2 回复  |  直到 14 年前
        1
  •  0
  •   Craig Stuntz    14 年前

    如果您不能返回足够的数据来完全实现实体,那么id字段是 当然 这将是必需的——然后您需要将proc上的返回类型更改为复杂类型,而不是实体。

        2
  •  0
  •   Manuel Castro    12 年前

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

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

    在这种情况下,“infocomercial”是一个与“comercial”结构相同的POCO类,它首先在dbContext中绑定到ef代码,然后在viewModel中使用这个独立的类来创建一个断开连接的“comercial”,这不是一个理想的解决方案,但在ef 5提供sp支持之前,它会很好地工作。