2010-08-02 3 views
1

J'ai hérité d'une base de données de taille moyenne que nous essayons d'utiliser avec Entity Framework dans une réécriture MVC2 nous sommes travaille sur. Nous avons utilisé la base de données existante pour générer le modèle de données (fichier .edmx) et tout était bon. Jusqu'à ce que je me rende compte que je ne pouvais pas utiliser la notation dot accéder à tous les champs. Lorsque j'ai regardé de plus près, j'ai pu voir que le premier cas qui fonctionnait était probablement un coup de chance. Il y a plusieurs colonnes dans le tableau pour des choses comme SupervisorID, SecretaryID, DogGroomerID et ainsi, sur tous pointant vers la table Employee et étiquetés comme des clés étrangères. On dirait que Visual Studio a presque fait ce qu'il fallait, il a juste nommé toutes ces associations après les rôles impliqués, puis les nombres attachés pour les rendre uniques. Donc, le code suivant fonctionne:Aidez-moi à donner des noms significatifs aux Entity Framework Navigation Properties, pas Utilisateur {1,2,3,4, ...}

appointment.Employee1.name // My name 
appointment.Employee7.name // My Boss's Name 
appointment.Employee5.name // Fluffy's groomer's name 

Mais cela va à l'encontre du but recherché. Alors, qu'est-ce que j'ai fait de mal ou ce qui est mal configuré qui ferait que Visual Studio génère des noms si manifestement stupides? J'ai essayé de les changer dans l'outil de modélisation visuelle et cela a fonctionné. Renommer Employee7 à Supervisor a eu l'effet désiré mais ce n'est pas vraiment une solution évolutive pour moi de passer les 10 prochaines heures à renommer les choses. Que faisons-nous lorsque la base de données est à nouveau lancée par le client sur le terrain et que j'ai besoin de créer un nouveau schéma?

Merci pour toute idée et aide!

-Eric

Répondre

0

Pour en revenir à cela, le vrai problème était plus tôt dans la chaîne d'outils. Nous venons de résoudre des choses en éditant les noms dans le fichier .edmx et en faisant très attention à fusionner les changements quand la base de données a changé. Ce n'est pas une bonne solution, mais vous ne pouvez passer autant de temps sur les choses.

0

Dans le contexte de ASP.NET MVC, vous pouvez utiliser DisplayNameAttribute pour ajouter des métadonnées à votre modèle. Ce billet de blog peut vous aider à démarrer: http://bradwilson.typepad.com/blog/2009/10/aspnet-mvc-2-templates-part-2-modelmetadata.html

+1

Merci, mais je ne sais pas si c'est mon problème, ou du moins je ne suis pas voir comment l'appliquer. Les classes du modèle sont générées à partir de .edmx qui est construit à partir de la base de données elle-même, seulement après qu'il y a un endroit pour attacher de telles métadonnées. Mon problème est que les propriétés de navigation obtiennent des noms de type «foo4» inutiles dans la phase de génération. (Je pense.) (J'espère vraiment que l'explication du PEBCAK viendra et sauvera la journée.) – Ukko

2

Vous pouvez créer une classe partielle pour vous entité et ajouter toutes les propriétés requises:

public partial class Appointment 
{ 
    public Employee Supervisor 
    { 
     get 
     { 
      return this.Employee1; 
     } 
    } 
} 
Questions connexes