2012-10-02 17 views
8

में रोवर्सन तुलना एंटिटी फ्रेमवर्क का उपयोग करके rowversion फ़ील्ड की तुलना कैसे करें? मेरे पास एक टेबल है जिसमें कॉलम है, मैं टेबल से डेटा प्राप्त करना चाहता हूं जिसके लिए पंक्ति संस्करण निर्दिष्ट मूल्य से अधिक है।एंटिटी फ्रेमवर्क

//code 
byte[] rowversion = .....somevalue; 

_context.Set<T>().Where(item => item.RowVersion > rowVersion); 

इस लाइन काम नहीं करता है, यह फेंकता त्रुटि:

cannot be applied to operands of type 'byte[]' and 'byte[]'

किसी भी विचार कैसे मैं सी #/एफई में rowversion क्षेत्रों की तुलना कर सकते हैं?

+2

rowversion स्तंभ के साथ करने के लिए नीचे, आप मूल रूप से केवल समानता (या गैर समानता) के लिए जाँच कर सकते हैं - क्या तुम सच में करने के लिए है या नहीं "से भी बड़ा" परीक्षण नहीं कर सकते। –

+0

@marc_s मैं इतना भी सोचा, लेकिन वास्तव में, करीब से देख ले, [प्रलेखन] (http://msdn.microsoft.com/en-us/library/ms182776.aspx) rowversion मूल्यों की बात करते हैं, की संख्या बढ़ रही है जो का समर्थन करता है अवलोकन कि एक पंक्तिवर्ती को 64-बिट पूर्णांक के रूप में माना जा सकता है, और बाद में डेटाबेस में उच्च मान डाले गए हैं, और यह 64-बिट पूर्णांक होने का मतलब है कि अतिप्रवाह का कोई यथार्थवादी मौका नहीं है। – hvd

उत्तर

0

क्या आप वाकई RowVersion की कि कोषेर इस्तेमाल होता है क्या? जब यह खत्म हो जाता है तो क्या होता है?

मुझे लगता है कि आप इसे स्ट्रिंग या पूर्णांक पहले कन्वर्ट करने के लिए की आवश्यकता होगी। उदाहरण के लिए

Encoding.Unicode.GetString(ba) 

आप एसएफ को ईएफ से भी कॉल कर सकते हैं। :-)

0

EntitySQL का उपयोग करें।

इस तरह की एक विस्तार की तुलना का उपयोग करें::

public static class EntityFrameworkHelper 
    { 
     public static int Compare(this byte[] b1, byte[] b2) 
     { 
      throw new Exception("This method can only be used in EF LINQ Context"); 
     } 
    } 

तो फिर तुम

byte[] rowversion = .....somevalue; 
_context.Set<T>().Where(item => item.RowVersion.Compare(rowversion) > 0); 

कर सकते हैं कारण यह बिना काम करता है

// Drop down to ObjectContext and query against ObjectSet: 
var objectContext = (dbContext as IObjectContextAdapter).ObjectContext; 
// Create param for EntitySQL 
var param = new ObjectParameter("rowVersion", rowVersion); 
// Create IQueryable<T> 
var query = objectContext.CreateObjectSet<T>.Where("it.RowVersion > @rowVersion",param); 
1

यहाँ हम इस को हल करने के लिए किया था है एक सी # कार्यान्वयन इसलिए है क्योंकि तुलना विस्तार विधि को वास्तव में कभी नहीं कहा जाता है, और ईएफ LINQको सरल बनाता हैx > y

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