2008-09-17 19 views
7

मुझे किसी व्यक्ति की तरह कुछ प्रस्तुत करने के लिए व्यावसायिक वस्तु या इकाई बनाने की अवधारणा मिलती है। मैं फिर एक डीटीओ का उपयोग कर व्यक्ति को क्रमबद्ध कर सकता हूं और इसे ग्राहक को भेज सकता हूं। यदि ग्राहक ऑब्जेक्ट को बदलता है, तो वहां पर एक IsDirty ध्वज हो सकता है ताकि जब इसे सर्वर पर वापस भेजा जाए तो मुझे इसे अपडेट करना है।व्यावसायिक वस्तुओं में परिवर्तनों को कैसे ट्रैक करें?

लेकिन अगर मेरे पास ऑर्डर ऑब्जेक्ट है तो क्या होगा? इसमें मुख्य हेडर informaton, ग्राहक, आपूर्तिकर्ता, आवश्यक दिनांक इत्यादि है। इसके बाद ऑर्डरइटम्स है जो एक सूची < ऑर्डरइटम> है, आदेश देने के लिए आइटम है। मैं अपने यूआई पर इस व्यवसाय ऑब्जेक्ट का उपयोग करने में सक्षम होना चाहता हूं। तो मेरे पास स्थान, आपूर्तिकर्ता, आवश्यक तिथि, आदि के लिए लगाए गए कुछ टेक्स्टबॉक्स हैं और ऑर्डरइटम तक लगाए गए ग्रिड हैं। चूंकि ऑर्डरइटम एक सूची है, इसलिए मैं आसानी से रिकॉर्ड जोड़ और हटा सकता हूं। लेकिन मैं इसे कैसे ट्रैक करूं, खासकर हटाए गए आइटम। मैं नहीं चाहता कि हटाए गए आइटम को मेरे ग्रिड में दिखाई दे और यदि मैं foreach का उपयोग करता हूं, तो मुझे उन पर पुन: प्रयास करने में सक्षम नहीं होना चाहिए, क्योंकि उन्हें हटा दिया गया है। लेकिन मुझे अभी भी इस तथ्य को ट्रैक करने की जरूरत है कि एक विलोपन था। मैं परिवर्तनों को कैसे ट्रैक करूं? मुझे लगता है कि मुझे काम की एक इकाई का उपयोग करने की ज़रूरत है? लेकिन फिर कोड काफी जटिल लगता है। तो मुझे आश्चर्य है कि क्यों न केवल डेटाटेबल्स का उपयोग करें और मुफ्त में परिवर्तन ट्रैकिंग प्राप्त करें? लेकिन फिर मैंने पढ़ा कि व्यापार वस्तुओं को कैसे जाने का तरीका है।

मुझे साधारण व्यक्ति उदाहरणों पर विभिन्न उदाहरण मिल गए हैं, लेकिन ऑर्डर जैसे हेडर-विवरण उदाहरण नहीं हैं।

बीटीडब्ल्यू इस के लिए सी # 3.5 का उपयोग कर।

उत्तर

-1

डेटा ऑब्जेक्ट्स परिवर्तनों को ट्रैक नहीं करते हैं। डेटाकॉन्टेक्स्ट और ऑब्जेक्ट्स पर परिवर्तन ट्रैकिंग डेटाकॉन्टेक्स्ट के माध्यम से पुनर्प्राप्त की जाती है।

public class FooDataContext : DataContext 
{ 
    public Table<Order> Orders; 
} 

public class Order 
{ 
     [DbColumn(Identity = true)] 
     [Column(DbType = "Int NOT NULL IDENTITY", IsPrimaryKey = true, IsDbGenerated = true)] 
     public int Id { get; set; } 

     [DbColumn(Default = "(getutcdate())")] 
     [Column(DbType = "DateTime", CanBeNull = false, IsDbGenerated = true)] 
     public DateTime DateCreated { get; set; } 

     [Column(DbType = "varchar(50)", CanBeNull = false, IsDbGenerated = false)] 
     public string Name { get; set; } 
} 

अब आप अपने codebehind में आप की तरह कुछ कर सकते हैं::

public void UpdateOrder(int id, string name) 
{ 
    FooDataContext db = new FooDataContext(); 
    Order order = db.Orders.Where(o=>o.Id == id).FirstOrDefault(); 

    if (order == null) return; 

    order.Name = name; 

    db.SubmitChanges(); 
} 

मैं सीधे कोड में डेटा संदर्भ उपयोग करने की अनुशंसा नहीं होता तो आदेश परिवर्तनों को ट्रैक करने में आप निम्न कार्य करने होंगे पीछे, लेकिन लिंक से एसक्यूएल के साथ शुरू करने का यह एक अच्छा तरीका है। मैं एक बाहरी परियोजना में अपने सभी डेटाबेस इंटरैक्शन डालने की सलाह दूंगा और जीयूआई से उन वर्गों को कॉल करूंगा जो इस व्यवहार को समाहित करते हैं।

यदि आप लिंक टू एसक्यूएल के लिए नए हैं तो मैं एक लिंक टू एसक्यूएल (डीबीएमएल) फ़ाइल बनाने की अनुशंसा करता हूं।

समाधान एक्सप्लोरर में अपनी प्रोजेक्ट पर राइट क्लिक करें, और नया आइटम जोड़ें चुनें। लिंक से SQL फ़ाइल का चयन करें, और फिर यह आपको अपने डेटाबेस से कनेक्ट करने और टेबल का चयन करने देगा।

फिर आप जेनरेट कोड देख सकते हैं, और लिंकक टू एसक्यूएल कैसे काम करता है और आप इसके साथ क्या कर सकते हैं इस बारे में कुछ शानदार विचार प्राप्त कर सकते हैं।

उपयोग कि SQL के लिए Linq के साथ काम करने और है कि अब तक ले जाएगा पर एक दिशानिर्देश ...

+0

विषय से बाहर रास्ता !! –

6

सबसे पहले के रूप में, आप एक मौजूदा रूपरेखा है कि इन मुद्दों के पते, CSLA.NET की तरह उपयोग कर सकते हैं। इस ढांचे के लेखक ने इन मुद्दों को हल किया है। इसके लिए http://www.rockfordlhotka.net/cslanet/ पर जाएं। यहां तक ​​कि यदि आप पूर्ण ढांचे का उपयोग नहीं करते हैं, तो अवधारणाएं अभी भी लागू हैं।

यदि आप अपना खुद का रोल करना चाहते हैं, तो मैंने अपने संग्रह के लिए सूची का उपयोग करने के बजाय अतीत में जो किया है, मैंने बाइंडिंगलिस्ट से प्राप्त एक कस्टम प्रकार का उपयोग किया है। बाइंडिंगलिस्ट से निषिद्ध करने से आप आइटम को जोड़ने/निकालने के व्यवहार को ओवरराइड कर सकते हैं। तो उदाहरण के लिए आप "delteted" वस्तुओं का एक और आंतरिक संग्रह कर सकते हैं। हर बार ओवर्रिडन निकालें विधि को आपके संग्रह पर बुलाया जाता है, आइटम को "हटाए गए" संग्रह में डाल दें, और फिर निकालें विधि के मूल कार्यान्वयन को कॉल करें। आप अतिरिक्त आइटम या बदली गई वस्तुओं के लिए भी ऐसा ही कर सकते हैं।

2

आप काम की एक इकाई की आवश्यकता के बारे में सोच रहे हैं, लेकिन एक नहीं लिखते हैं। NHibernate या कुछ अन्य ओआरएम का प्रयोग करें। यही वह है जिसे वे बनाते हैं। उनके पास वर्क ऑफ वर्क्स है।

अधिकांश ऑब्जेक्ट्स के लिए व्यवसाय वस्तुएं वास्तव में "जाने का तरीका" हैं। आप एक गहरे क्षेत्र में डाइविंग कर रहे हैं और करने के लिए बहुत कुछ सीखना होगा। डीडीडी में देखो।

मैं आपके कोड-बैक में कोड के खिलाफ दृढ़ता से सलाह भी दूंगा। एमवीपी पैटर्न में देखो।

मैं भी (जबकि मैं बहुत सी नई, अत्यधिक महत्वपूर्ण चीजों को सीखने के लिए परेशान था) सोलिड में देखता हूं।

आप जेपी बुडू के कुछ भी नहीं बल्कि नेट कोर्स को देखना चाहते हैं क्योंकि इसमें इनमें से बहुत सी चीजें शामिल हैं।

संबंधित मुद्दे

 संबंधित मुद्दे