2009-04-21 9 views
0

J'ai un ancien code que je réécris en utilisant SubSonic pour aider les futurs responsables. Pour la plupart, cela a été relativement simple, car tout appelle une procédure stockée. Mais maintenant, j'ai un peu de difficulté avec un code ADO.NET fortement couplé.Comment écrire ce code en utilisant SubSonic?

Le code dépend du SqlDataAdapter pour décider quand appeler un proc stocké INSERT ou UPDATE, ce que je comprends. Comment puis-je réécrire ce code de manière SubSonic?

public void SaveInvoice(InvoiceItems invoiceItems) 
{ 
    // extraneous code removed 
    // invoiceItems is a dataset 

    cmd.CommandType = CommandType.StoredProcedure; 
    cmd.CommandText = "InvoiceItem_INSERT"; 
    cmd.Connection = conn; 

    updateCmd.CommandType = CommandType.StoredProcedure; 
    updateCmd.CommandText = "InvoiceItem_UPDATE"; 
    updateCmd.Connection = conn; 

    SqlCommandBuilder.DeriveParameters(cmd); 
    SqlCommandBuilder.DeriveParameters(updateCmd); 

    adapter.InsertCommand = cmd; 
    adapter.UpdateCommand = updateCmd; 

    adapter.Update(invoiceItems._InvoiceItemTable); 
} 

Je suis nouveau sur SubSonic, donc toute aide est appréciée. Toutes les réponses utiles seront joyeusement mises à jour.

Répondre

1

Il n'y aura pas de représentation exacte de ce type de code en utilisant SubSonic car l'insertion/mise à jour automagique est effectuée spécifiquement par la méthode SqlDataAdapter.Update(). S'il y a quelque part, enterré quelque part dans l'espace de noms SubSonic, j'aimerais aussi savoir comment l'utiliser!

Si vous avez affaire à une table (par exemple InvoiceItems), vous pouvez faire le test vous-même (ce qui utilise la mise en œuvre d'enregistrement actif généré automatiquement de SubSonic):

int key = InvoiceItems.ID; // not sure what your primary key identifier is called 
InvoiceItem item = new InvoiceItem(key); 
if (item != null) 
{ 
    SPs.InvoiceItem_UPDATE(param1, param2, etc).Execute(); 
} 
else 
{ 
    SPs.InvoiceItem_INSERT(param1, param2, etc).Execute(); 
} 

Espérons que cela vous aide à démarrer.

En tant que sidenote totalement indépendant, don't rely on the DeepSave() method pour essayer d'enregistrer sur plusieurs tables, car il n'est pas implémenté. Je l'ai trouvé à la dure ...

+0

Savez-vous s'il existe un moyen d'obtenir un objet Command à partir du proc stocké? Le doco SubSonic fait tellement défaut. :( –

+0

Je crois que le mieux que vous pouvez faire est d'obtenir la version de SubSonic de l'objet de commande, SPs.StoredProcName(). Commande - Je ne sais pas si cela sera utile ou non –

+0

Je l'ai regardé, mais chaque j'essaie de l'utiliser, je reçois une exception.J'essaie de décider si cela vaut la peine de se battre, ou si je devrais laisser ce code tel quel:/ –

Questions connexes