0 votes

Comment identifier de manière unique une entité dans Entity Framework ?

J'utilise l'Entity Framework comme ORM pour une application ASP.Net (webforms). Supposons que j'ai un ensemble de pages "liste/détail" dans mon application, lorsque vous cliquez sur une ligne dans la page de la liste, je voudrais passer un ID d'un certain type pour cette ligne à une page de détail, que j'utiliserais ensuite pour charger la ligne à partir de ma couche de données. Dans mon cas spécifique, la clé primaire est simplement une colonne d'identité "rowId".

EF, cependant, semble préférer "cacher" les clés primaires/étrangères afin que vous n'y ayez pas accès (par défaut).

Je suis nouveau dans EF, et je me demande s'il existe une meilleure pratique pour identifier de façon unique une ligne en dehors du contexte de l'entité. J'imagine que je pourrais ajouter une colonne identifiant unique à mon enregistrement et une propriété correspondante à mon modèle d'entité, mais il semble redondant d'avoir effectivement 2 identifiants uniques pour la ligne. Existe-t-il un meilleur moyen de transporter un identifiant au niveau de la couche de présentation ?

Dans mon gestionnaire d'événement _ItemDataBound(), je pense pouvoir faire quelque chose comme.. :

var announcement = (Announcement) e.Item.DataItem;
string rowID = announcement.EntityKey.EntityKeyValues[0].Value.ToString();

Est-ce recommandé ou est-ce que cela va à l'encontre du cadre de travail ?

Merci d'avance.

Scott

1voto

Craig Stuntz Points 95965

Non, ce que vous faites ne "va pas à l'encontre du Framework (Entity)". Cela ne veut pas dire qu'il ne pourrait pas être amélioré, cependant :

  1. Je sais que ce n'est pas MVC, mais même dans WebForms, je pense toujours que c'est une bonne idée d'avoir une certaine séparation entre votre couche de données et vos pages web. J'utiliserais probablement le modèle Repository avec un modèle de présentation ici plutôt que de donner à la page une connaissance directe de l'Entity Framework.
  2. Puisque vous avez déjà converti l'Annonce en son type approprié, vous pouvez accéder directement à la valeur de l'ID, plutôt que de passer par l'EntityKey. Ainsi, au moins, votre page n'a connaissance que de l'annonce et non de l'Entity Framework.
  3. Le code actuel suppose qu'il existe une EntityKey (ce qui n'est pas toujours vrai, surtout avec les entités nouvellement insérées qui n'ont pas encore été validées dans la base de données) et qu'elle n'a qu'une seule colonne. C'est une bonne idée de tester ces présomptions et de lancer une exception significative au lieu de les laisser exploser avec une référence nulle si elles sont violées.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X