2011-10-27 4 views
5

मॉडल इंस्पेक्टर फ़िल्टर परिभाषाओं को परिभाषित करने के साधन प्रदान नहीं करता है। कोई विचार/कामकाज?कोड द्वारा निबर्ननेट 3.2 मैपिंग के साथ फ़िल्टर परिभाषाओं को कैसे जोड़ें?

मैं कोड से मैपिंग के साथ निम्न उत्पन्न करने के लिए की जरूरत है:

<filter-def name="filterName" use-many-to-one="false"> 
    <filter-param name="filterParamName" type="Int32"/> 
</filter-def> 

उत्तर

8

मैं प्राप्त करने के लिए है कि NHibernate.Cfg.Configuration का उपयोग कर पा रहा था:

var cfg = new Configuration(); 

var filterDef = new FilterDefinition(
    "filterName", 
    null, // or your default condition 
    new Dictionary<string, IType> { { "filterParamName", NHibernateUtil.Int32 } }, 
    false); 
cfg.AddFilterDefinition(filterDef); 

// cfg.AddMapping(...) 
// cfg.DataBaseIntegration(...) 

var sessionFactory = cfg.BuildSessionFactory(); 

तो इकाई मानचित्रण में फिल्टर को परिभाषित:

public class EntityMap : ClassMapping<Entity> 
{ 
    public EntityMap() 
    { 
     Table("Entity"); 
     Filter("filterName", m => m.Condition("FilteredField = :filterParamName")); 
     // remaining mapping 
    } 
} 

और फिर इस रूप में इसका इस्तेमाल करते हैं:

using(var session = sessionFactory.OpenSession()) 
{ 
    var filterValue = 123; 
    session 
     .EnableFilter("filterName") 
     .SetParameter("filterParamName", filterValue); 
} 

मुझे आशा है कि आपको यह उपयोगी लगेगा।

6

FYI करें,

यह ध्यान रखें कि AddFilterDefinition करने के लिए कॉल AddMapping से पहले है महत्वपूर्ण है, अन्यथा आप एक ArgumentException("An item with the same key has already been added") मिल जाएगा!

+0

यह मेरा दिन बना दिया! –

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