Entity Framework: table sans clé primaire

.net entity-framework

Question

J'ai une base de données existante avec laquelle j'aimerais construire une nouvelle application à l'aide de EF4.0

Certaines tables n'ont pas de clés primaires définies. Ainsi, lorsque je crée un nouveau modèle de données d'entité, le message suivant s'affiche: "La table / vue TABLE_NAME n'a pas de clé primaire définie et aucune clé primaire valide ne peut être déduite. Cette table / La vue a été exclue. Pour utiliser l'entité, vous devez revoir votre schéma, ajouter les clés appropriées et le décommenter ".

Si je veux les utiliser et modifier des données, dois-je nécessairement ajouter un PK à ces tables, ou existe-t-il une solution de contournement pour ne pas être obligé?

Réponse acceptée

L'erreur signifie exactement ce qu'elle dit.

Même si tu pouvais contourner ça, fais-moi confiance, tu ne veux pas. Le nombre de bogues déroutants qui pourraient être introduits est stupéfiant et effrayant, sans oublier le fait que votre performance va probablement disparaître.

Ne travaille pas autour de ça. Corrigez votre modèle de données.

EDIT: J'ai vu que plusieurs personnes votent en faveur de cette question. C'est bien, je suppose, mais gardez à l'esprit que l'OP a demandé de mapper une table sans clé primaire, pas une vue . La réponse est toujours la même. Contourner le besoin des PC d’avoir une PK sur les tables est une mauvaise idée du point de vue de la facilité de gestion, de l’intégrité des données et des performances.

Certains ont fait remarquer qu'ils n'étaient pas en mesure de réparer le modèle de données sous-jacent, car ils mappaient vers une application tierce. Ce n'est pas une bonne idée, car le modèle peut changer de vous. Dans ce cas, vous voudrez peut-être mapper une vue, ce qui, encore une fois, n'est pas ce que le PO a demandé.


Réponse populaire

Je pense que ceci est résolu par Tillito:

Entity Framework et vue SQL Server

Je citerai son entrée ci-dessous:

Nous avons eu le même problème et voici la solution:

Pour forcer le cadre de l'entité à utiliser une colonne en tant que clé primaire, utilisez ISNULL.

Pour forcer le cadre de l'entité à ne pas utiliser une colonne comme clé primaire, utilisez NULLIF.

Une méthode simple consiste à envelopper l’instruction select de votre vue dans une autre sélection.

Exemple:

SELECT
  ISNULL(MyPrimaryID,-999) MyPrimaryID,
  NULLIF(AnotherProperty,'') AnotherProperty
  FROM ( ... ) AS temp

répondu 26 avril '10 à 17:00 par Tillito



Related

Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow