Наследование с сущностями POCO в Entity Framework 4 - PullRequest
2 голосов
/ 12 марта 2010

У меня есть класс 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 ]

1 голос
/ 25 мая 2012

Я тоже столкнулся с этой проблемой, и в моем случае это было также из-за ошибки в рукописном классе POCO. В большинстве случаев вы получаете информационные сообщения об ошибках, но, как кажется, в некоторых редких случаях вы получаете что-то расплывчатое, например «Невозможно найти сопоставление объектов».

В моем конкретном случае в базе данных были столбцы типа VARCHAR (1), которые я неправильно сопоставил с char. Я не пробовал char ?, но сопоставление со строкой определенно решило проблему.

1 голос
/ 13 марта 2010

Если вы заметили, что в моем CSDL есть столбец «CardExpiratoin» (орфографическая ошибка в имени столбца БД). Конечно, у моего класса, который был закодирован вручную, не было этой орфографической ошибки.

Способ, которым я обнаружил проблему, состоит в том, чтобы сгенерировать POCO из шаблона T4, увидеть, как он работает, и вернуться обратно оттуда. Надеюсь, что это помогает любому с той же проблемой. Я также хотел бы, чтобы ошибка была немного яснее для начала.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...