2010-12-04 25 views
5

Salut je suis nouveau dans C# et je veux demander comment écrire ce code plus pretyComment l'écrire joli?

public void Update(Product pr) 
    { 
     Product prod = GeProductById(pr.ProductID); 
     prod.Name  = pr.Name; 
     prod.Count  = pr.Count; 
     prod.InputPrice = pr.InputPrice; 
     prod.InputDate = pr.InputDate; 
     prod.OutPrice = pr.OutPrice; 
     prod.InputPriceByCurrency = pr.InputPriceByCurrency; 
     prod.InputPriceCurrency  = pr.InputPriceCurrency; 
     prod.ComeOwner = pr.ComeOwner; 
     prod.GroupID = pr.GroupID; 
     prod.Discount = pr.Discount; 

     _context.SubmitChanges(); 
    } 

Tout ce qu'il ne copie que toutes les propriétés sauf id. Puis-je l'écrire sous peu? Merci et merci pour mon mauvais anglais

+1

Quel est le problème avec elle? Semble parfaitement lisible, mis à part des tabulations et des noms bizarres. Cela peut être mieux si vous pouvez enregistrer 'pr' directement. Utilisez-vous un framework ici? – Kobi

+1

@Kobi Ouais) mais si ce sera 10 ou 20 propriétés)) Je veux l'écrire sous peu. Merci pour la réponse –

+0

Eh bien alors vous le feriez par la réflexion, mais je ne suggérerais pas de le faire ... –

Répondre

4

Il semble qu'il y ait plus à cela. Pourquoi ne pouvez-vous pas enregistrer pr dans le magasin de données en l'état? Il semble que vous utilisiez l'ORM de manière inefficace, bien qu'il puisse y avoir de bonnes raisons à cela que nous ne pouvons pas voir dans la portée de ce code. Sur une note plus générale, vous pouvez avoir de la chance avec quelque chose comme automapper dans des cas comme celui-ci. Bien que, honnêtement, je pense avec un peu de re-fonctionnement de la façon dont vous utilisez l'ORM, il ne devrait pas être nécessaire ici. En se basant sur les commentaires de loin, je voudrais aussi noter qu'il n'y a rien de foncièrement mauvais avec une fonction de cartographie longue et ennuyeuse comme celle-ci. Même si c'est 20 propriétés ou 200 propriétés. Si ce n'est écrit qu'une fois, est facile à lire et à comprendre ce qu'il fait, fait ce qu'il fait bien, etc. alors ce n'est pas un mauvais morceau de code. Le code n'est pas toujours joli, et il n'a pas besoin d'être. Il est facile d'être tenté de faire quelque chose de plus intelligent pour rendre le code plus cool ou plus intéressant, mais intelligent n'est pas toujours mieux quand il s'agit de supporter ce code plus tard.

+0

Je ici que je dois changer l'objet que je reçois de bd lors de la mise à jour Soumettre des changements? Comment puis-je simplement le stocker et le soumettre? ((( –

+0

@Sanja Melnichuk: Ceci est principalement une spéculation basée sur ce que je vois dans le code présenté, mais il semble que vous devriez récupérer l'objet du magasin de données avant de faire tout ce qui est fait avant que cette méthode soit appelé (modifiez ses propriétés ailleurs dans l'application, etc.), puis enregistrez-le dans le magasin de données, plutôt que de créer un nouvel objet qui en représente un dans le magasin de données et de le mapper juste avant la mise à jour. – David

+0

Merci pour la réponse maintenant je remplis mieux) –

4

Comme l'a dit David avant, vous utilisez probablement l'ORM dans le mauvais sens.

Peut-être cet article expliquant updates in Linq-To-Sql pourrait être utile

Fondamentalement, vous pouvez appeler la méthode attach pour rattacher l'entité extérieure au contexte actuel et SubmitChanges tourner plus tard au large

optimiste concurrency
+0

+1 pour usfull lien thanx –