2009-08-25 13 views
10

मेरे पास एक से अधिक सेट के साथ एक अभिभावक/बाल संबंध मैप किया गया है।NHibernate मानदंड संग्रह में

public class Parent 
{ 
    public ISet<Child> Children { get; set; } 
} 

public class Child {} 

public class ParentMap : ClassMap<Parent> 
{ 
    HasManyToMany(x => x.Children) 
     .AsSet(); 
} 

मैं कैसे माता पिता है कि किसी भी बच्चे होते हैं को चुनने के लिए एक प्रश्न लिख सकते हैं? मैं अनुमान लगाया होगा कि यह कुछ इस तरह होगा, लेकिन इस एपीआई मौजूद नहीं है:

Session.CreateCriteria<Parent>() 
    .Add(Expression.Contains("Children", child) 
    .List<Parent>(); 

मैं नहीं मेरे जीवन के लिए कहीं भी इस सवाल का जवाब मिल सकता है। मेरा दिमाग आज पूरी तरह से काम नहीं कर रहा है और Google ने अब तक मुझे असफल कर दिया है।

उत्तर

9

इस तरह कुछ कैसे?

Session.CreateCriteria<Parent>() 
    .CreateCriteria("Children") 
    .Add(Expression.Eq("Id", child.Id) 
    .List<Parent>(); 

या

Session.CreateCriteria<Parent>() 
    .CreateCriteria("Children") 
    .Add(Expression.In("Id", child.Id) 
    .List<Parent>(); 

ताकि आप आईडी की एक सरणी में पारित कर सकते हैं।

+0

हां, मैंने इसके बारे में सोचा, लेकिन NHibernate में आईडी की तुलना करने के बारे में कुछ गलत लगता है। मुझे पता है कि यह अस्थिर है, फिर भी यह जानना चाहेंगे कि कोई और तरीका है या नहीं। –

+0

गलत क्यों? आईडी का उद्देश्य डीबी में अपनी वस्तुओं को विशिष्ट रूप से पहचानना है। – RKitson

+1

वैसे यह है कि आईडी का उद्देश्य * एनएचबीरनेट * को मेरी संस्थाओं को विशिष्ट रूप से पहचानने के लिए है ताकि मैं वस्तुओं से निपट सकूं। अगर बच्चा माता-पिता से एक असामान्य संबंध था, तो मैं अभिव्यक्ति.एक ("चाइल्ड", बच्चा) कहूंगा और आईडी के बारे में कुछ नहीं कहूंगा। मुझे पता है कि मैं यहां नाइटपीकी हूं, मैंने अभी सोचा है कि इसमें के लिए मानदंड एपीआई में कुछ मौजूद था और अन्य सभी इकाई तुलना की तरह ही इस्तेमाल किया जा सकता था। –

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