2009-05-05 15 views
2

Pourquoi SqlMetal gâche-t-il les noms d'association. Par exemple Dans ma table 'TextMessage', j'ai deux colonnes référençant la table 'ApplicationUser'. 'SenderUserId' et 'RecipientUserId'SqlMetal générant des noms d'association d'ordures

Quand je lance SqlMetal et regarde mon 'ApplicationUser' classe

Pour 'RecipientUserId' il génère:

[Association(Name="FK__TextMessa__Recip__72910220", Storage="_TextMessages", ThisKey="Id", OtherKey="RecipientUserId", DeleteRule="NO ACTION")] 
     public EntitySet<TextMessage> TextMessages 
     { 
      get 
      { 
       return this._TextMessages; 
      } 
      set 
      { 
       this._TextMessages.Assign(value); 
      } 
     } 

et pour 'SenderUserId' il génère ces ordures propriété nommée:

[Association(Name="FK__TextMessa__Sende__73852659", Storage="__TextMessa__Sende__73852659s", ThisKey="Id", OtherKey="SenderUserId", DeleteRule="NO ACTION")] 
     public EntitySet<TextMessage> _TextMessa__Sende__73852659s 
     { 
      get 
      { 
       return [email protected]__TextMessa__Sende__73852659s; 
      } 
      set 
      { 
       [email protected]__TextMessa__Sende__73852659s.Assign(value); 
      } 
     } 

Comment puis-je y remédier? Ceci est inutilisable. Y at-il une meilleure façon de générer Linq To Sql Code ???

Répondre

1

Vous pouvez demander SqlMetal pour générer un fichier DBML:

SqlMetal /server:myserver /database:northwind /dbml:northwind.dbml /namespace:nwind 

puis corriger les noms d'association dans le fichier DBML puis générer de la DBML:

SqlMetal /code:nwind.cs /map:nwind.map northwind.dbml 

Le seul problème avec faire c'est-à-dire que si vous ré-générez le DBML après la mise à jour de votre base de données, les modifications apportées à votre DBML disparaîtront.

Autres options:

  • Utilisez le concepteur de Visual Studio (pas grand si votre schéma est grand)
  • Rechercher un outil tiers pour générer DataContexts
  • Écrivez votre propre outil

Un autre point: j'ai rarement vu que SqlMetal émettait un nom d'association aussi mauvais. Comment sont nommées vos colonnes? Y a-t-il un conflit avec un autre nom de relation?

2

Il génère le nom basé sur la clé étrangère. Nommez votre clé étrangère quelque chose de plus lisible que le nom généré automatiquement. par exemple:

contrainte RecipientMessages Références FOREIGN KEY (RecipientUserId) ApplicationUser (UserId)

Questions connexes