2011-03-30 18 views
21

यदि मैं इंटरनेट पर NHibernate मानदंड API क्वेरी उदाहरणों की खोज करता हूं तो ऐसे उदाहरण हैं जो प्रतिबंधों का उपयोग करते हैं और अन्य अभिव्यक्ति का उपयोग करते हैं। उन दोनों के बीच मतभेद क्या हैं?NHibernate मानदंड प्रतिबंध बनाम अभिव्यक्ति

उदाहरण के लिए:

posts = session.CreateCriteria<Post>() 
    .Add(Expression.Eq("Id", 1)) 
    .List<Post>(); 

posts = session.CreateCriteria<Post>() 
    .Add(Restrictions.Eq("Id", 1)) 
    .List<Post>(); 

उत्तर

16

मुझे लगता है कि प्रतिबंध एनएच 2 में जारी किए गए थे और अब यह पसंदीदा तरीका है।

Resharper के अनुसार जब भी मैं अभिव्यक्ति का उपयोग मैं एक संकेत Access to a static member of a type via a derived type

इसके अलावा according to this post कहने के लिए मिल Ayende द्वारा: -

मानदंड प्रश्नों परिभाषित करने के लिए प्रतिबंध के बजाय अभिव्यक्ति वर्ग के उपयोग करने के लिए पसंद करते हैं ।

1

अभिव्यक्ति प्रतिबंध से विरासत लेकिन यह प्रतिबंध का उपयोग करने की सिफारिश की है। अभिव्यक्ति स्पष्ट रूप से बहिष्कृत है।

Ayende (old post about NH 2.0) के अनुसार, दस्तावेज़ आमतौर पर प्रतिबंधों का संदर्भ लेंगे।

12

स्रोत कोड में namespace NHibernate.Criterion.Expression है के लिए कहा गया है कि स्रोत कोड की ओर इशारा करते के लिए

+0

+1 "के इस वर्ग के सेमीफाइनल पदावनत उपयोग प्रतिबंध है।" –

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