2008-09-25 12 views
4

J'utilise SqlMetal pour généraliser ma classe DataContext.dbml pour mon application ASP.net en utilisant LinqToSql. Lorsque j'ai initialement créé le fichier DataContext.dbml, Visual Studio l'a utilisé pour créer un fichier DataContext.designer.cs associé. Ce fichier de concepteur contient la classe DataContext en C# utilisée dans toute l'application (et dérivée du code XML dans le fichier dbml) et est essentielle pour combler l'écart entre la sortie de SqlMetal et l'utilisation de DataContext avec LinqToSql.Génération automatique d'un fichier de concepteur DataContext lors de l'utilisation de SqlMetal et Visual Studio

Cependant, lorsque je modifie la base de données et recrée le fichier dbml, le fichier du concepteur n'est jamais régénéré sur mon site Web. Au lieu de cela, l'ancien fichier du concepteur est conservé (et par conséquent, aucun des changements apportés au fichier DBML n'est accessible via la classe LinqToSql DataContext).

Le seul processus que j'ai pu utiliser jusqu'à présent pour régénérer le fichier de concepteur est

  1. Aller à l'Explorateur Windows et supprimer à la fois le dbml et Designer.cs fichiers
  2. Aller à Visual Studio et cliquez sur Actualiser dans l'Explorateur de solutions. Les fichiers dbml et designer.cs disparaissent maintenant du projet.
  3. Régénérer le fichier dbml à l'aide de SqlMetal
  4. Accédez à Visual Studio et cliquez sur Actualiser dans l'Explorateur de solutions. Le fichier designer.cs est maintenant recréé.

Il semble que Visual Studio génère uniquement le fichier designer.cs lorsqu'un nouveau fichier dbml est détecté et qu'il ne possède pas encore de fichier designer.cs. Ce processus est assez peu pratique, car il implique plusieurs étapes manuelles et gâche les choses avec le contrôle de la source.

Est-ce que quelqu'un sait comment je peux obtenir le fichier designer.cs régénéré automatiquement sans avoir à suivre le processus manuel de suppression/actualisation/régénération/suppression décrit ci-dessus?

Répondre

4

Le fichier designer.cs est normalement géré automatiquement lorsque vous apportez des modifications à DBML dans Visual Studio. Si VS ne s'exécute pas lorsque vous recréez le DBML, il peut ne pas savoir.

Vérifiez que le fichier .DBML dans Visual Studio a la propriété Outil personnalisé définie sur MSLinqToSQLGenerator. Si ce n'est pas le cas, réglez-le à cela. Si c'est le cas, essayez de cliquer avec le bouton droit de la souris sur DBML après avoir apporté des modifications et choisissez Exécuter l'outil personnalisé pour voir si cela met à jour le fichier .designer.cs.

Affiche originale: Exécuter l'outil personnalisé a travaillé dans Visual Studio pour régénérer le fichier designer.cs.

J'ai également trouvé une meilleure solution - vous pouvez générer le fichier de classe en utilisant SqlMetal: "sqlmetal /code: DataContext.designer.cs/language: csharp DataContext.dbml".

3

Je ne sais pas comment il l'a fait, mais voici quelques choses sur lesquelles j'ai travaillé pour le récupérer. Quelque chose l'avait verrouillé, donc il a généré un nouveau fichier db.designer.cs (db1.designer.cs).

j'avais ouvert au-delà de comparer, comparer ce fichier à la précédente (BC n'est pas censé verrouiller et je ne pense pas que ce soit le problème, jamais eu ce problème avant avec.)

Ouvert le fichier de projet dans le bloc-notes et de rechercher ces entrées, j'ai revu à la version précédente dans le contrôle de la source ..

c'est ce que j'ai rapporté.

<Compile Include="db.designer.cs"> 
     <AutoGen>True</AutoGen> 
     <DesignTime>True</DesignTime> 
     <DependentUpon>db.dbml</DependentUpon> 
</Compile> 

... 

<LastGenOutput>db.designer.cs</LastGenOutput> 

le lastgenOutput a été mis à db1.desginer.cs

+0

Merci Doug, ce que je cherchais. Il a continué à créer un fichier de concepteur en double, et il m'énervait sans fin. Cela a résolu mon problème. – AceCorban