10

द्वारा कई मानचित्रण के लिए कई मैं NHibernate 3.2 built-in mapping by code api (नहीं FluentNHibernate, और न ही xml) जानने की कोशिश कर रहा हूँ। क्या आप इन संस्थाओं के बीच कई से अधिक रिश्ते को मैप करने में मेरी मदद कर सकते हैं?NHibernate 3.2 कोड

public class Post { 
    public virtual Id { get; set; } 
    public IList<Tag> Tags { get; set; } 
} 

public class Tag { 
    public virtual Id { get; set; } 
    public IList<Post> Posts { get; set; } 
} 

मेरे प्राथमिक कुंजी रणनीति है:

Id( 
    t => t.Id, 
    t => { 
     t.Generator(Generators.HighLow, g => g.Params(new { max_low = 100 })); 
     t.Column(typeof(TEntity).Name + "Id"); 
    }); 

और मैं यह कोशिश:

// TagMap : ClassMapping<Tag> 
Bag(t => t.Posts, bag => { 
    bag.Inverse(true); 
    bag.Table("TagsPosts"); 
    bag.Cascade(Cascade.DeleteOrphans); 
}, t => t.ManyToMany(c => { 
    c.Column("PostId"); 
    c.Lazy(LazyRelation.Proxy); 
})); 

// PostMap : ClassMapping<Post> 
Bag(t => t.Tags, bag => { 
    bag.Table("TagsPosts"); 
    bag.Cascade(Cascade.DeleteOrphans); 
}, t => t.ManyToMany(c => { 
    c.Column("TagId"); 
    c.Lazy(LazyRelation.Proxy); 
})); 

लेकिन यह काम नहीं करता।

उत्तर

27
// Post Map 
Bag(x => x.Tags, collectionMapping => 
       { 
        collectionMapping.Table("TagPosts"); 
        collectionMapping.Cascade(Cascade.None); 
        collectionMapping.Key(k => k.Column("PostID")); 
       }, 
        map => map.ManyToMany(p => p.Column("TagID"))); 

// Tag Map 
Bag(x => x.Posts, collectionMapping => 
             { 
              collectionMapping.Table("TagPosts"); 
              collectionMapping.Cascade(Cascade.None); 
              collectionMapping.Key(k => k.Column("TagID")); 
             }, 
       map => map.ManyToMany(p => p.Column("PostID"))); 
+1

धन्यवाद। यह काम करता हैं! उत्तर वोट दिया गया और स्वीकार किया गया: डी –

+0

क्या आप किसी भी कैस्केडिंग का उपयोग न करने के बारे में कुछ स्पष्टीकरण जोड़ सकते हैं? – Daniel

1

मुझे लगता है कि आप इस तरह nhibernate जो कई-से-अनेक मेज पर स्तंभ यह जाँच करने के लिए की जरूरत है, कुछ बताना कुंजी निर्धारित करने की आवश्यकता:

// TagMap 
bag.Key(k => k.Column("TagId")); 

// PostMap 
bag.Key(k => k.Column("PostId"));