2009-08-06 5 views
1

J'ai un assez grand fichier DBML et a récemment découvert que MSLinqToSQLGenerator de Visual Studio génère une impression différente de celle:MSLinqToSQLGenerator génère un résultat différent de SQLMetal

SqlMetal.exe All.dbml /code:All.designer.vb /namespace:LINQ2FSE /pluralize /provider:SQL2005 

Il semble avoir laissé tomber un arbitraire (et je pense relativement faible) ensemble d'associations du code VB généré. Mais SQLMetal fonctionne bien. La sortie ne devrait-elle pas être la même? Après d'autres recherches, je trouve que la différence semble être des associations sur des entités qui impliquent des propriétés qui sont également utilisées sur d'autres associations sur la même entité avec un nombre différent de colonnes. Par exemple: entité A a des colonnes id et le nom entité B a id colonnes, nom et FKA (clé étrangère à A) entité C a id colonnes, nom, FKA et FKB (annulable FKB)

entité C a association C_A, qui relie FKA à a.id il a aussi association C_B, qui relie FKA et FKB à B.fkA et B.id

Le code pour les propriétés de support C_B ne sera pas générée par Visual studio, mais être généré par SqlMetal.exe.

Ce type d'association est-il autorisé? Y a-t-il une raison pour que le code soit généré différemment?

Répondre

2

Il s'avère (avec l'aide de Microsoft) que SQLMetal génère des résultats différents que MSLinqToSQLGenerator de l'EDI parce que le fichier DBML (généré par un outil que j'ai créé) avait des relations définies où le parent pouvait accéder aux enfants. n'a pas défini l'association parente. Apparemment, vous devez définir l'association de l'enfant au parent (la relation de clé étrangère). Si vous n'avez défini qu'une association du parent aux enfants et que l'association inverse n'est pas définie (ou que l'association inverse a un nom différent), le code source .NET de cette association ne sera généré dans aucune direction. Ceci est géré correctement pour MSLinqToSQLGenerator, mais SQLMetal n'effectue pas autant de validation, apparemment, et générera le code d'association de toute façon. Microsoft a signalé ce problème au développement.

Questions connexes