2010-01-08 5 views
1

Je développe actuellement une application utilisant SubSonic 2.2 et j'ai des problèmes pour mettre à jour une des colonnes d'un PK composite sur une table.Mise à jour d'une valeur de clé primaire en utilisant SubSonic 2.2

Mon code est à peu près ceci:

foreach (pageItem page in pages) { 
    page.IdFile = newIdFile; 
    page.PageNumber = counter; 
    counter++; 
    page.Save(); 
} 

Cela ne met pas à jour mon dossier.

Ma table pageItem contient 4 colonnes qui composent le PK. J'ai seulement besoin de mettre à jour l'un d'eux pour simuler que je déplace un objet de page d'un fichier à l'autre, pour éviter de créer un nouvel enregistrement juste pour copier essentiellement toutes les mêmes valeurs sauf cet ID et le numéro de page.

Lorsque j'utilise SQL Server profileur alors je peux voir que le code suivant est émis à la DB:

exec sp_executesql N'UPDATE [dbo].[pageItem] SET [IdFile] = @IdFile, [PageNumber] = @PageNumber WHERE [IdPage] = @IdPage AND [IdCont] 
= @IdCont AND [IdExp] = @IdExp AND [IdFile] = @IdFile; 
SELECT @IdPage AS id',N'@PageNumber int,@IdPage int,@IdCont int, 
@IdExp varchar(1),@IdFile int', @PageNumber=4,@IdPage=329, @IdCont=1, @IdExp='1', @IdFile=156 

Donc, fondamentalement, mon problème est que la mise à jour n'utilise des valeurs différentes pour l'ancien et le nouveau IdFichier clés, ils utilisent tous les deux le paramètre @IdFile.

Existe-t-il une solution de contournement qui n'utiliserait de préférence pas CodingHorror, par exemple, que je pourrais utiliser pour mettre à jour mes enregistrements? Cela ne me dérange pas d'utiliser une instruction SQL brute, c'est juste que je suis très intéressé par l'utilisation de SubSonic à son plein potentiel, donc tous les conseils seront grandement appréciés.

Cordialement,

Fernando

Répondre

0

Les composites peuvent être PKs une douleur dans de nombreux environnements. Je pense que SS2.x ne les supporte pas très bien, mais ne peut pas maintenant trouver une référence pour le confirmer. Est-il possible que vous puissiez réorganiser votre table pour avoir un seul champ PK?

+0

Probablement pas dans ce cas, mais considérera certainement sur d'autres utilisations de SubSonic, pour éviter de tels problèmes. Savez-vous si ces types de problèmes ont été résolus en version 3? – Fervelas

+0

Désolé, je ne sais pas, j'utilise toujours 2.2 – kevinw

0

Vous devez coder ces cas spéciaux dans des fichiers de classe partielle. Regardez le code généré pour la table avec plusieurs clés primaires pour localiser le problème. Ensuite, codez tout ce qui est nécessaire dans un fichier non généré. Je ne pense pas que v3 traite des clés composées non plus. Subsonic 3 ne prend pas en charge les clés primaires composites.