2017-12-04 11 views
13

मैं Dapper.Contrib के साथ इस तालिका अद्यतन करने के लिए कोशिश कर रहा हूँ:डैप्पर UpdateAsync स्तंभ उपेक्षा

public class MyTable 
{ 
    public int ID { get; set; } 
    public int SomeColumn1 { get; set; } 
    public int SomeColumn2 { get; set; } 
    public int CreateUserID { get; set; } 
    public int UpdateUserID { get; set; } 
} 

मैं CreateUserID स्तंभ अद्यतन करने के लिए नहीं करना चाहते हैं, क्योंकि यह एक अद्यतन विधि है ताकि मैं इस स्तंभ को अनदेखा करना चाहते डैपर को कॉल करते समय - Update.Async (इकाई) विधि।

मैंने [NotMapped] और [UpdateIgnore] विशेषताओं का उपयोग करने की कोशिश की लेकिन कोई मदद नहीं।

नोट: मैं अभी भी इस कॉलम को सम्मिलित परिचालनों पर पारित करना चाहता हूं, इसलिए, [गणना] और [लिखें (झूठा)] उचित नहीं है।

कोई मुझे यह पता लगाने जब डेटाबेस में तालिका को अद्यतन करने के लिए कैसे इस स्तंभ की अनदेखी करने में मदद कर सकते हैं?

अग्रिम धन्यवाद।

+3

आपको कुछ अन्य लाइब्रेरी का उपयोग करना होगा, डैपर में अपडेट नहीं है। एसिंक एक्सटेंशन। शायद डैपर-एक्सटेंशन या कुछ समान है? –

+1

@VoidRay सही। Dapper.Contrb.Extensions –

+1

यदि आप रिपोजिटरी पैटर्न/या किसी करीबी पैटर्न का उपयोग कर रहे हैं (और आपको ठोस कोड कार्यान्वयन से अपना कोड डीक्यूपल करना चाहिए) तो आप बस 'अपडेट' को ओवरराइड कर सकते हैं और अपने तर्क का उपयोग कर सकते हैं। –

उत्तर

1

मैं [परिकलित] विशेषता का उपयोग कर सुझाव देते हैं। Dapper.Contrib Readme.md

+1

ऐसा प्रतीत होता है कि Dapper.Contrib के लिए प्रलेखन को भ्रमित तरीके से कहा जाता है। [गणना] विशेषता को आवेषणों पर भी अनदेखा किया जाता है - यह आपके उपयोग के मामले के लिए काम कर सकता है या नहीं भी। – BlakeH

+1

मैंने पहले ही इसे पहले ही कोशिश की लेकिन यह सम्मिलित परिचालनों पर काम नहीं करता क्योंकि यह इसे अनदेखा करता है। मुझे अपडेट करते समय केवल इसे अनदेखा करना होगा। –

2

अच्छा, यह अभी समर्थित नहीं है। यहां issue से संबंधित है, और समाधान केवल डैपर v2 में अपेक्षित है। तुम भी source code का निरीक्षण (यह बहुत आसान है) और देखते हैं कि अद्यतन गुणों को निम्नानुसार की खोज कर रहे हैं कर सकते हैं:

var allProperties = TypePropertiesCache(type); 
keyProperties.AddRange(explicitKeyProperties); 
var computedProperties = ComputedPropertiesCache(type); 
var nonIdProps = allProperties.Except(keyProperties.Union(computedProperties)).ToList(); 

तो सभी गुण कुंजी \ ExplicitKey \ परिकलित और जो के साथ चिह्नित नहीं लिखने योग्य शामिल किए गए हैं। एक ही InsertAsync के लिए होता है (सिवाय ExplicitKey साथ गुण भी डालने में शामिल किए गए हैं, लेकिन आप अपने situtaion में इस विशेषता का उपयोग नहीं कर सकते, क्योंकि अपनी संपत्ति सब के बाद प्रमुख नहीं है)।

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

2

रूप @Evk पहले से ही अपने जवाब में बताया गया है, वहाँ कोई समाधान अभी तक लागू है। उन्होंने कामकाज का भी उल्लेख किया है।

इसके अलावा, आप सीधे इस मामले के लिए डैपर को छोड़कर डैपर (IDbConnection.Execute(...)) का उपयोग करना चुन सकते हैं।

मुझे एक ही समस्या थी (हालांकि डैपर एक्सटेंशन के साथ) विशेष कॉलम अपडेट और अन्य जटिल प्रश्नों के साथ उन डैपर एक्सटेंशन या तो उत्पन्न नहीं हो सकते हैं या इसके साथ होने के लिए बहुत अधिक काम की आवश्यकता है।

मुझे लगता है कि विशेष मामले के लिए DapperExtensions की बजाय सीधे डैप्पर इस्तेमाल किया; प्रोजेक्ट का दूसरा हिस्सा अभी भी डैपर एक्सटेंशन का लाभ उठाता है। यह ट्रेड-ऑफ की तरह है। ऐसे मामले बहुत सीमित हैं। मैंने पाया कि इसके लिए डैपर एक्सटेंशन को ट्विकिंग/मजबूर करने के बजाय यह बेहतर समाधान है। यह मुझे समय और प्रयासों पर भी बचाया।

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