【问题标题】:EF5: Multiple result sets from stored procedureEF5:来自存储过程的多个结果集
【发布时间】:2012-10-02 13:22:18
【问题描述】:

我按照this 的文章从一个存储过程中检索多个实体集。

我已更改实体的列映射,以便它们通过 Resharper。 我是否必须重写结果映射中的列映射?

例如,我有以下 EntitySetMapping:

      <EntitySetMapping Name="IrmaObjectConfiguraties">
        <EntityTypeMapping TypeName="IrmaModel.IrmaObjectConfiguratie">
          <MappingFragment StoreEntitySet="IrmaObjectConfiguratie">
            <ScalarProperty Name="Gid" ColumnName="GID" />
            <ScalarProperty Name="IrmaObjectGid" ColumnName="IrmaObject_GID" />
            <ScalarProperty Name="IrmaConfiguratieGid" ColumnName="IrmaConfiguratie_GID" />
          </MappingFragment>
        </EntityTypeMapping>
      </EntitySetMapping>

此实体作为存储的 proc 结果集的一部分返回 bij:

        <ResultMapping>
          <EntityTypeMapping TypeName="IrmaModel.IrmaObjectConfiguratie">
            <!--ScalarProperty Name="Gid" ColumnName="Gid" />
            <ScalarProperty Name="IrmaObjectGid" ColumnName="IrmaObject_Gid" />
            <ScalarProperty Name="IrmaConfiguratieGid" ColumnName="IrmaConfiguratie_Gid" /-->
          </EntityTypeMapping>
        </ResultMapping>

当我删除注释时,导入函数的执行正常,但是当没有列映射时,我检索到以下错误:

数据读取器与指定的不兼容 'IrmaModel.IrmaObjectConfiguratie'。类型的成员, 'IrmaObjectGid',在数据中没有对应的列 同名阅读器。

作为一种解决方法,我可以再次定义所有列映射,但也可以使用 EntitySetMapping? 中定义的列映射?

【问题讨论】:

  • 为什么不去掉 resharper 或者至少去掉它的任意规则呢?
  • 我喜欢 CamelCase 上面使用下划线。不幸的是,列名中包含数据库下划线。

标签: entity-framework entity-framework-5


【解决方案1】:

我认为 ResultMapping 不会重用来自 EntitySet 映射的映射。似乎(我在这里不是 100% 肯定)如果您不指定属性 列映射,EF 将尝试使用属性名称作为存储过程返回的结果集中的列名称。

【讨论】:

  • 只要存储过程返回的列名与实体属性名匹配,就不需要添加映射。但如果映射与实体映射定义中的映射相同,则需要通过结果集映射添加相同的映射。如果您可以通过指定像 PropertyMapping=EntityMapping 这样的额外属性来重用实体映射,那就太好了
  • 我认为目前不可能。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-07
  • 1970-01-01
  • 2011-04-22
  • 2011-05-21
  • 2023-03-05
  • 1970-01-01
相关资源
最近更新 更多