2012-04-10 10 views
11

मैं PetaPOCO और साफ-सुथरी उपयोग शुरू कर दिया है और वे दोनों अपने स्वयं सीमाएं हैं। लेकिन इसके विपरीत, वे एंटीटी फ्रेमवर्क की तुलना में इतनी बिजली तेज हैं कि मैं इसकी सीमाओं को छोड़ देता हूं।माइक्रो ओआरएम के साथ काम करते समय सर्वश्रेष्ठ रणनीतियां?

मेरे सवाल यह है: वहाँ किसी भी ORM हमें एक-से-कई परिभाषित करने देता है जो है, कई-टू-वन और कई-से-अनेक संबंधों को ठोस रूप से? डैपरनेट और पेटापोको दोनों ही नकली इन रिश्तों को नकली करने के लिए हैक-इश तरीका लागू करते हैं और इसके अलावा जब आप 5-6 से जुड़ सकते हैं तो वे बहुत अच्छी तरह से स्केल नहीं करते हैं। अगर वहाँ एक भी सूक्ष्म ORM हमें इसके साथ सौदा कर सकते हैं कि नहीं है, तो मेरी 2nd सवाल मैं इस तथ्य जाना कि इन सूक्ष्म ORMs है कि रिश्तों को परिभाषित करने में अच्छा नहीं कर रहे हैं और हर एक प्रकार के लिए एक नया POCO इकाई बनाने देना चाहिए है क्वेरी का मैं निष्पादित कर रहा हूं जिसमें इन प्रकार के बहु जुड़ शामिल हैं? क्या यह स्केल अच्छी तरह से हो सकता है?

मुझे आशा है कि मैं अपने प्रश्न के साथ स्पष्ट कर रहा हूँ। यदि नहीं, तो मुझे बताएं।

+2

मैं अपने आप को इन सूक्ष्म ORMs के साथ toyed और समाप्त हो गया इस कारण से अवधारणा से दूर चलना। सरल असंबंधित पीओसीओ के लिए, वे शानदार रूप से अद्भुत हो सकते हैं, लेकिन संबंधों को संभालने (और विशेष रूप से घोंसले वाले) उनके लिए लगभग एक असफल बिंदु है। यदि आपने NHibernate की कोशिश नहीं की है, तो मैं इसे माइक्रो ओआरएम और इकाई ढांचे के बीच एक प्रदर्शन मध्य ग्राउंड के रूप में अनुशंसा करता हूं। इसके अतिरिक्त, यह परिपक्व है और लगभग हर ओआरएम सुविधा का समर्थन करता है जिसे आप सोच सकते हैं। – Chris

+0

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

+1

एनएचबर्ननेट बस ऐसा कर सकता है। NHibernate उन्हें "नामांकित क्वेरीज़" कहते हैं। मुझे किसी भी माइक्रो ओआरएम के बारे में पता नहीं है जो आपसे पूछे जाने वाले रिश्तों को संभाल सकता है। यह मुख्य रूप से कारण है कि मैं उनसे दूर रह गया हूं। क्षमा करें :( – Chris

उत्तर

7

मैं आम तौर पर इन चरणों का पालन।

  1. मैं अपना व्यूमोडेल इस तरह से बनाता हूं जो सटीक डेटा और प्रारूप का प्रतिनिधित्व करता है जिसे मैं एक दृश्य में प्रदर्शित करना चाहता हूं।
  2. मैं मेरे विचार मॉडल के लिए पर PetaPoco के माध्यम से डेटाबेस से सीधे क्वेरी।

अपनी शाखा में मैं एक

T SingleInto<T>(T instance, string sql, params object[] args);

विधि है जो किसी मौजूदा ऑब्जेक्ट ले जाता है और करने के लिए यह नाम से मेल नहीं खाते पर सीधे स्तंभों को मैप कर सकते है। यह इस परिदृश्य के लिए शानदार ढंग से काम करता है।

मेरे शाखा यहां पाया जा सकता है, तो जरूरत है। https://github.com/schotime/petapoco/

+0

धन्यवाद। यह Asp.Net MVC के लिए सबसे अच्छा हो सकता है लेकिन मुझे लगता है कि Asp.Net वेबफॉर्म के लिए मुझे शायद इसकी आवश्यकता नहीं है। सही? – Jack

+0

मैं यह नहीं कहूंगा। यहां तक ​​कि वेबफॉर्म में मैंने कभी भी अपने डोमेन मॉडल का उपयोग नहीं किया, लेकिन एक डीटीओ जिस तरह से मैं नियंत्रण करने के लिए बाध्य था, केवल उस डेटा को खींच रहा था जिसकी मुझे वास्तव में आवश्यकता थी। – Schotime

+0

बढ़िया! आपके जवाब ने मुझे सोचने का एक नया तरीका दिया! आपकी शाखा भी मेरी स्थिति के लिए उपयुक्त होगी। धन्यवाद। – Jack

2

वे भी बहुत अच्छी तरह से बड़े पैमाने में नहीं आता है जब आप 5-6 हो सकता है

हाँ, वे नहीं है मिलती है, लेकिन वह, एक अच्छी बात है क्योंकि निर्माण जब सिस्टम आप हो जाएगा जटिल होने लगते हैं, आप प्रदर्शन जुर्माना या सिरदर्द के बिना, जो भी आप चाहते हैं, करने के लिए स्वतंत्र हैं।

हाँ, मुझे याद है जब मुझे इन सभी जॉन्स को Linq2SQL के साथ लिखने की आवश्यकता नहीं है, लेकिन फिर मैंने आम जॉइन लिखने के लिए एक सरल टूल बनाया है, इसलिए मुझे किसी भी इकाई के लिए मूल एसक्यूएल मिलता है और फिर मैं वहां से निर्माण कर सकता हूं ।

उदाहरण:

[TableName("Product")] 
[PrimaryKey("ProductID")] 
[ExplicitColumns] 
public class Product { 
    [PetaPoco.Column("ProductID")] 
    public int ProductID { get; set; } 

    [PetaPoco.Column("Name")] 
    [Display(Name = "Name")] 
    [Required] 
    [StringLength(50)] 
    public String Name { get; set; } 

      ... 
      ... 

    [PetaPoco.Column("ProductTypeID")] 
    [Display(Name = "ProductType")] 
    public int ProductTypeID { get; set; } 

    [ResultColumn] 
    public string ProductType { get; set; } 

      ... 
      ... 


    public static Product SingleOrDefault(int id) { 
     var sql = BaseQuery(); 
     sql.Append("WHERE Product.ProductID = @0", id); 
     return DbHelper.CurrentDb().SingleOrDefault<Product>(sql); 
    } 
    public static PetaPoco.Sql BaseQuery(int TopN = 0) { 
     var sql = PetaPoco.Sql.Builder; 
     sql.AppendSelectTop(TopN); 
     sql.Append("Product.*, ProductType.Name as ProductType"); 
     sql.Append("FROM Product"); 
     sql.Append(" INNER JOIN ProductType ON Product.ProductoTypeID = ProductType.ProductTypeID"); 
     return sql; 
    } 
+1

हाय एडवार्डो, आपका उत्तर सहायक है लेकिन मेरा मुद्दा यह है कि मुझे वें बनाना है ese इकाइयों (अनुमान)? उदाहरण के लिए। मेरे पास श्रेणी के साथ उत्पाद है और उस श्रेणी में बदले में विभाग है और विभाग में कर्मचारी हैं। आप अपने असली दुनिया प्रोजेक्ट में पेटापोको के साथ इसका प्रबंधन कैसे करेंगे? क्या आप एक साधारण प्रोजेक्शन क्लास बनायेंगे जो पदानुक्रमिक संबंध बनाने के बजाए सभी स्तंभ पंक्तियों को नियंत्रित करेगा? क्या यह ठीक है या इसे एक बुरा अभ्यास माना जाता है? – Jack

0

क्या QueryFirst यहां सहायता मिलेगी? आपको माइक्रो-एम्स की गति मिलती है, प्रत्येक त्रुटि-ए-संकलन-समय-त्रुटि के अतिरिक्त आराम के साथ-साथ आपके प्रश्नों और उनके आउटपुट के लिए इंटेलिजेंस दोनों। आप एसक्यूएल में अपने जुड़ने को ईश्वर के रूप में परिभाषित करते हैं। यदि स्थिति में शामिल होने को लिखकर वास्तव में आप गुस्सा दिलाना है, DBForge जवाब हो सकता है, और क्योंकि आप एसक्यूएल में काम कर रहे हैं, इन उपकरणों संगत कर रहे हैं, और आप में बंद नहीं कर रहे हैं।

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