2009-03-02 5 views
0

Le programme d'installation:LINQ to SQL Mise à jour par le biais des questions BLL - Meilleures pratiques

J'ai une grande forme avec de nombreux domaines qui sont collectés pour mettre à jour un objet produit. Ainsi, dans la page ASPX, l'utilisateur change les champs qui ont besoin d'être mis à jour et ils cliquent sur submit. Dans le code derrière je fais quelque chose comme ça;

Dim p as New MyCompany.Product() 
p = p.GetProductById(ProductID) 

J'étendez la classe partielle du produit de LINQ to SQL pour ajouter cette méthode (GetProductById) à l'objet

p.Name = txtName.Text 
p.SKU = txtSKU.Text 
p.Price = txtPrice.Text 
...  
p.Update() 

Ceci est une méthode de mise à jour dans la classe partielle de produits étendue. Je mets à jour la base de données, j'envoie des courriels et je mets à jour les tables de l'histoire, donc je veux que cette méthode fasse toutes ces choses.

Il y a 50 autres champs pour le projet si évidemment il serait ridicule d'avoir une méthode qui rassemble tous les 50 champs (et je ne veux pas aller dans cette voie toute façon bc il est plus difficile de déboguer OMI)

le problème:

Si je reçois le produit via LINQ to SQL en utilisant un DataContext alors je ne peux jamais le mettre à jour à nouveau car il des erreurs sur la possibilité de joindre et de l'entité qui est déjà attaché à un autre DataContext.

La question:

SO si je reçois un objet par une méthode dans mon BLL, mettre à jour dans la page ASPX et essayez ensuite d'envoyer les mises à jour par le nouveau BLL de mettre à jour la base de données, comment devrait Je vais faire ça?

Répondre

0

Indépendamment de LINQ-to-SQL ou non, voici ce que je fais. Lors de la soumission, je recherche l'élément (il doit être rapide s'il s'agit d'un seul élément utilisant le PK), ma DAL renvoie un objet de données et j'utilise la réflexion pour mapper chaque élément de la page avec les propriétés correspondantes dans l'objet de données. Ma DAL ne met à jour que les éléments modifiés.

Je pense que ce que vous avez à faire est le même, rassemblant toutes les valeurs et les soumettant. Si LinqToSql n'est pas assez intelligent pour déterminer ce qui a changé, ce n'est peut-être pas la meilleure solution.

+0

Eh bien, je n'utilise pas Linq à SQL à ce stade n'est pas une option. Je ne peux pas revenir en arrière et refaire toute ma demande juste à cause de ce problème. Merci pour votre réponse. Je continuerai à chercher une réponse spécifique à Linq-to-Sql. – EdenMachine

Questions connexes