2011-06-10 7 views
8

मैं माइक्रो-ओआरएम (डैपर) का उपयोग कर रहा हूं और अपने भंडारों के उपयोग के लिए एक यूनिट ऑफ वर्क (यूओडब्ल्यू) कार्यान्वयन के साथ आने की कोशिश कर रहा हूं। मैं थोड़ी सी स्टंप हूं कि मेरे यूओडब्ल्यू में माता-पिता-बच्चे (विदेशी कुंजी) संबंधों से कैसे निपटना सबसे अच्छा है। उदाहरण के लिए तो अगर मैं दो संस्थाओं जो डेटाबेस तालिकाओं के लिए सीधे नक्शा निम्नलिखित है:कार्य पैटर्न का यूनिट - माता-पिता के बच्चों के रिश्तों को प्रबंधित करना

public class User 
{ 
    public int Id { get; set; } 
    public string Email { get; set; } 
    public string Password { get; set; } 
    public string Name { get; set; } 
    public int ClientDatabaseId { get; set; } 

    public ClientDatabase ClientDb { get; set; } 
} 

public class ClientDatabase 
{ 
    public int Id { get; set; } 
    public string DataSource { get; set; } 
    public string FailoverPartner { get; set; } 
    public string InitialCatalog { get; set; } 
} 

जहां एक उपयोगकर्ता विदेशी कुंजी User.ClientDatabaseId के माध्यम से एक ClientDatabase साथ माता-पिता के बच्चे का रिश्ता है। उपयोगकर्ता और क्लाइंटडेटाबेस दोनों पर आईडी संपत्ति पहचान कॉलम हैं। इस प्रकार मेरे UOW इंटरफेस परिभाषित किया गया है:

public interface IUnitOfWork 
{ 
    void MarkDirty(object entity); 
    void MarkNew(object entity); 
    void MarkDeleted(object entity); 
    void Commit(); 
    void Rollback(); 
} 

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

उत्तर

5

आप अपने उपयोगकर्ता कक्षा का उपयोग Aggregate Root के रूप में क्यों नहीं करते हैं। तो कोड के लिए डेटाबेस में डालने से पहले यह जांच करेगा कि क्लाइंटडेटाबेस शून्य नहीं है या नहीं। यदि शून्य नहीं है तो आप आईडी प्रॉपर्टी को देख सकते हैं कि यह एक नया क्लाइंटडेटाबेस या मौजूदा है (यह तय करने के लिए कि क्या आपको कोई डालने या अपडेट करने की आवश्यकता है)। फिर आप ClientDatabaseId प्रॉपर्टी को पॉप्युलेट कर सकते हैं।

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