cela est possible, mais cela nécessite un peu de travail manuel dans le fichier EDMX, et je n'ai pas réussi à faire en sorte que EF utilise la clé de substitution comme clé primaire réelle sur la table de liaison. Vous devez faire en sorte que EF utilise une combinaison de foo_id et de bar_id comme clé primaire.
dans votre modèle de stockage que vous devez changer la EntityType de la table de lien de
<EntityType Name="foo_bar">
<Key>
<PropertyRef Name="surrogate_pk" />
</Key>
<Property Name="surrogate_pk" Type="bigint" Nullable="false" StoreGeneratedPattern="Identity" />
<Property Name="foo_id" Type="int" Nullable="false" StoreGeneratedPattern="None" />
<Property Name="bar_id" Type="int" Nullable="false" StoreGeneratedPattern="None" />
</EntityType>
à:
<EntityType Name="foo_bar">
<Key>
<PropertyRef Name="foo_id" />
<PropertyRef Name="bar_id" />
</Key>
<Property Name="foo_id" Type="int" Nullable="false" StoreGeneratedPattern="None" />
<Property Name="bar_id" Type="int" Nullable="false" StoreGeneratedPattern="None" />
</EntityType>
Vous faites la clé de substitution invisible à EF, et lui dire d'utiliser la combinaison des deux clés étrangères comme clé primaire.
Dans votre modèle conceptuel, vous devez avoir le nombre-many défini:
<Association Name="foo_bar_association">
<End Role="foo" Type="foo" Multiplicity="*" />
<End Role="bar" Type="bar" Multiplicity="*" />
</Association>
et dans vos applications, un AssociationSetMapping:
<AssociationSetMapping Name="foo_bar_association" TypeName="foo_bar_association" StoreEntitySet="foo_bar">
<EndProperty Name="foo">
<ScalarProperty Name="id" ColumnName="foo_id" />
</EndProperty>
<EndProperty Name="bar">
<ScalarProperty Name="id" ColumnName="bar_id" />
</EndProperty>
</AssociationSetMapping>
De loin la meilleure façon d'obtenir ce à droite, est de supprimer la clé de substitution de la base de données, générer l'EDMX, puis mettre ce modèle sur votre base de données d'origine. Le résultat sera le même. EF n'a pas vraiment besoin de la clé de substitution pour quoi que ce soit, la table est invisible dans une association de plusieurs personnes
La clé de substitution n'a pas vraiment d'intérêt, alors cela fonctionnerait bien. Simplement supprimer le champ du modèle ne semble pas faire de différence. Pourrait-il être exclu d'une manière plus précise ou quelque chose? –
La suppression de la clé de substitution dans le concepteur ne le supprime pas du modèle de stockage. Vous devrez éditer manuellement l'EDMX pour cela. –