2009-02-19 6 views
1

Je souhaite implémenter l'héritage Table par type avec Entity Framework pour une base de données existante.Entity Framework - Héritage table par type - Base de données existante

La base de données:

alt text

L'héritage pour ImageParagraphs fonctionne parfaitement, mais je ne suis pas en mesure de faire une table par héritage de type avec LinkListParagraph en raison des différentes clés primaires (ParagraphID; ParagraphID + LinkID) :

erreur 1 erreur 3003: problème de mappage Fragment à partir de la ligne 113: toutes les principales propriétés (Paragraphs.ParagraphID) du EntitySet les paragraphes doivent être mis en correspondance avec toutes les propriétés clés (LinkListParagraph.LinkID, LinkListParagraph.ParagraphID) de la table LinkListParagraph. C: \ Users \ Buc \ Documents \ Visual Studio 2008 \ Projects \ ParagraphTest \ ParagraphTest \ ParagraphModel.edmx 114 15 ParagraphTest

Y at-il une possibilité de résoudre ce problème sans modifier la base de données?

Ce que je veux faire est quelque chose comme ceci:

alt text

Répondre

1

Une façon peut-être de mentir à Entity Framework sur la clé primaire. Cela nécessiterait d'aller dans le mappage de magasin dans EDMX et de modifier les indicateurs de clé primaire. Cependant, sachez que si vous faites cela, l'assistant Mettre à jour le modèle à partir de la base de données tentera de «réparer» votre mappage chaque fois que vous effectuerez une mise à jour. Une autre solution consiste à créer une vue dans votre base de données et à mapper la vue à la place de la table.

0

Le problème principal provient des créations de clé par défaut inutiles de l'infrastructure de l'entité. Essayez d'ouvrir .edmx fichier au format xml et vous verrez maintenant la chose comme suit:

<EntityType Name="GSKItemDetails"> 
      <Key> 
      <PropertyRef Name="ItemId" /> 
      <!--<PropertyRef Name="Description" /> 
      <PropertyRef Name="NDCNumber" />--> 
      </Key> 
      <Property Name="ItemId" Type="varchar" Nullable="false" MaxLength="47" /> 
      <Property Name="Description" Type="varchar" Nullable="false" MaxLength="30" /> 
      <Property Name="NDCNumber" Type="varchar" Nullable="false" MaxLength="16" /> 
      <Property Name="UnitPrice" Type="decimal" Precision="19" Scale="4" /> 
     </EntityType> 

Dans mon cas commentingout les PropertyRefs unnecessasary, comme mentionné ci-dessus, résolu le problème de donner erreur: Erreur 3003.

Questions connexes