与实体框架4中的POCO实体的继承

时间:2010-03-12 20:07:40

标签: asp.net entity-framework asp.net-mvc-2

我有一个Consumer类和一个BillableConsumer:Consumer类。当我尝试对我的“使用者”集进行任何操作时,我收到错误消息“无法找到具有标识Models.BillableConsumer的类型的对象映射。

来自CSDL:

    <EntityType Name="BillableConsumer" BaseType="Models.Consumer">
      <Property Type="String" Name="CardExpiratoin" Nullable="false" />
      <Property Type="String" Name="CardNumber" Nullable="false" />
      <Property Type="String" Name="City" Nullable="false" />
      <Property Type="String" Name="Country" Nullable="false" />
      <Property Type="String" Name="CVV" Nullable="false" />
      <Property Type="String" Name="NameOnCard" Nullable="false" />
      <Property Type="String" Name="PostalCode" Nullable="false" />
      <Property Type="String" Name="State" />
      <Property Type="String" Name="StreetAddress" Nullable="false" />
    </EntityType>

来自C-S:

     <EntitySetMapping Name="Consumers">
        <EntityTypeMapping TypeName="IsTypeOf(Models.Consumer)">
          <MappingFragment StoreEntitySet="consumer">
            <ScalarProperty Name="LoginID" ColumnName="LoginID" />
            <ScalarProperty Name="FirstName" ColumnName="FirstName" />
            <ScalarProperty Name="LastName" ColumnName="LastName" />
          </MappingFragment>
        </EntityTypeMapping>
        <EntityTypeMapping TypeName="IsTypeOf(Models.BillableConsumer)">
          <MappingFragment StoreEntitySet="billinginformation">
            <ScalarProperty Name="CardExpiratoin" ColumnName="CardExpiratoin" />
            <ScalarProperty Name="CardNumber" ColumnName="CardNumber" />
            <ScalarProperty Name="City" ColumnName="City" />
            <ScalarProperty Name="Country" ColumnName="Country" />
            <ScalarProperty Name="CVV" ColumnName="CVV" />
            <ScalarProperty Name="LoginID" ColumnName="LoginID" />
            <ScalarProperty Name="NameOnCard" ColumnName="NameOnCard" />
            <ScalarProperty Name="PostalCode" ColumnName="PostalCode" />
            <ScalarProperty Name="State" ColumnName="State" />
            <ScalarProperty Name="StreetAddress" ColumnName="StreetAddress" />
          </MappingFragment>
        </EntityTypeMapping>
      </EntitySetMapping>

这是因为我没有专门将BillableConsumer实体添加到对象集中吗?我如何在POCO场景中这样做?

2 个答案:

答案 0 :(得分:1)

如果您在我的CSDL中注意到有一个名为“CardExpiratoin”的列(DB列名称中的拼写错误)。当然,我的手工编码的课程没有这个拼写错误。

我发现问题的方法是从T4模板生成POCO,看到它有效,并从那里回来。希望这可以帮助任何有同样问题的人。我也希望错误开始时更清楚。

答案 1 :(得分:1)

我也遇到了这个问题,在我的情况下,这也是因为POCO手写的错误。在大多数情况下,您会收到一条信息错误消息,但在某些极少数情况下,您会看到一些模糊的内容,例如“无法找到对象映射”。

在我的特定情况下,数据库中存在VARCHAR(1)类型的列,我错误地将其映射到char。我没有尝试char ?,但映射到字符串肯定解决了问题。