2010-12-04 26 views
5

Merhaba ben C# yeniyim ve ben daha pretyNasıl güzel yazılır?

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(); 
    } 

Bütün bu kodu yazmak için sadece id dışındaki tüm özelliklerini kopyalamak nasıl sormak istiyorum. Biraz yazabilir miyim? Üzgünüm ve kötüm için özür dilerim

+1

kapatarak geçerli bağlam ve SubmitChanges dış varlığı tutturmak için yöntem takın çağırabilirsiniz yardım olabilir? Tuhaf sekmelerden ve isimlerden başka, mükemmel okunabilir görünüyor. Eğer 'pr' doğrudan kaydederseniz daha iyi olabilir. Burada bir çerçeve kullanıyor musunuz? – Kobi

+1

@Kobi Evet) ama 10 veya 20 özellik olacaksa)) Kısa bir süre yazmak istiyorum. Yanıt için Thanx –

+0

Peki o zaman bunu yansıması ile yapardım, ama bunu yapmamanızı tavsiye etmem ... –

cevap

4

Bunun için daha fazlası var gibi görünüyor. Neden veri deposuna pr'u neden kaydedemiyorsunuz? Öyle görünüyor ki ORM'yi etkisiz bir şekilde kullanıyor olabilirsiniz, ancak bu kodun kapsamından göremediğimiz iyi bir sebep olabilir.

Daha genel bir notta, böyle durumlarda automapper gibi bir şeye sahip olabilirsiniz. Yine de, dürüst olmak gerekirse, ORM'yi nasıl kullandığınıza dair biraz yeniden çalışmayı düşünüyorum, burada gerekli olmamalı.

Şimdiye kadar yapılan yorumlara dayanarak, bunun gibi uzun ve sıkıcı bir eşleme işlevinde doğal olarak yanlış bir şey olmadığını da belirtmek isterim. 20 özellik veya 200 özellik olsa bile. Eğer sadece bir kez yazılmışsa, ne yaptıklarını anlamak ve anlamak kolaydır, ne işe yarıyorsa, o zaman kötü bir kod parçası değildir. Kod her zaman güzel değildir ve olması gerekmez. Kodu daha serin veya daha ilginç hale getirmek için daha akıllıca bir şey yapmak cazip olmak kolaydır, ancak bu kodu daha sonra desteklemek için akıllıca her zaman daha iyi değildir.

+0

Güncelleme yaparken bd'den aldığım nesneyi değiştirmem gerekiyor SubmitChanges? Sadece nasıl depolayıp gönderebilirim? ((( –

+0

@Sanja Melnichuk: Sunulan kodda gördüğüm şeyden ziyade çoğunlukla spekülasyon), ama bu yöntemin öncesinde ne yapıldığını yapmadan önce veri deposundan nesneyi almanız gerektiği gibi görünüyor. (uygulamada başka bir yerde özelliklerini değiştirir, vb.) ve daha sonra veri deposuna geri kaydeder. Veri deposunda birini temsil eden yeni bir nesne oluşturmak ve güncellemeden önce haritalamak yerine, burada yaptığınız gibi – David

+0

Yanıt için Thanx şimdi daha iyi doldurur) –

4

David'in dediği gibi, muhtemelen ORM'yi yanlış şekilde kullanıyorsunuzdur.

Belki updates in Linq-To-Sql açıklayan bu yazı

Temelde daha sonra edinmek nesi var iyimser eşzamanlılık

+0

+1 bizim için geçerli link thanx –