Hi Chris, Here is your example implemented using two different tables for the different cat relationships. First the classes:
public class Cat { public int Id { get; set; } public string Name { get; set; } } public class Rope { public int Id { get; set; } public string Name { get; set; } } public class Person { public int Id { get; set; } public string Name { get; set; } public IList<Cat> OwnedCats { get; set; } public IList<Cat> LikedCats { get; set; } public Rope LeftHand { get; set; } public Rope RightHand { get; set; } } Next, the mapping: class CatsPersistenceModel : PersistenceModel { public override void Configure(Configuration configuration) { addMapping(new CatMap()); addMapping(new RopeMap()); addMapping(new PersonMap()); base.Configure(configuration); } private class CatMap : ClassMap<Cat> { public CatMap() { Id(x => x.Id); Map(x => x.Name); } } private class RopeMap : ClassMap<Rope> { public RopeMap() { Id(x => x.Id); Map(x => x.Name); } } private class PersonMap : ClassMap<Person> { public PersonMap() { Id(x => x.Id); Map(x => x.Name); HasManyToMany<Cat>(x => x.OwnedCats) .WithTableName("OwnedCats") .AsBag() .Cascade.All(); HasManyToMany<Cat>(x => x.LikedCats) .WithTableName("LikedCats") .AsBag() .Cascade.All(); References(x => x.LeftHand); References(x => x.RightHand); } } } Finally, a demonstration test: [Test] public void CatsExample() { var cfg = new SQLiteConfiguration() .ShowSql() .InMemory() .ConfigureProperties(new Configuration()); new CatsPersistenceModel().Configure(cfg); var factory = cfg.BuildSessionFactory(); using (var session = factory.OpenSession()) { using (var tx = session.BeginTransaction()) { new NHibernate.Tool.hbm2ddl.SchemaExport(cfg).Execute(false, true, false, false, session.Connection, null); tx.Commit(); } int id; using (var tx = session.BeginTransaction()) { var paul = new Person(); paul.OwnedCats = new List<Cat> { new Cat { Name = "Cat 1" }, new Cat { Name = "Cat 2" } }; paul.LikedCats = new List<Cat> { paul.OwnedCats[0] }; paul.LeftHand = new Rope { Name = "left" }; paul.RightHand = new Rope { Name = "right" }; session.Save(paul.LeftHand); session.Save(paul.RightHand); session.Save(paul); id = paul.Id; tx.Commit(); } session.Clear(); using (var tx = session.BeginTransaction()) { var fromDB = session.Load<Person>(id); Assert.AreEqual(2, fromDB.OwnedCats.Count); Assert.AreEqual(1, fromDB.LikedCats.Count); Assert.AreEqual("left", fromDB.LeftHand.Name); Assert.AreEqual("right", fromDB.RightHand.Name); } } } } It could probably be shorter by using conventions or automapping but I thought a verbose example might be helpful. Is this what you were after? Paul Batum On Mon, Sep 15, 2008 at 7:33 AM, Gabriel Schenker <[EMAIL PROTECTED]>wrote: > you can find my articles about the fluent interface now on the new > NHibernate site www.nhforge.org/blogs/nhibernate > this IS the new central place for any information related to nhibernate and > the contribution projects > Enjoy > Gabriel > > By the way: in pure xml mapping you could put a where filter to distinguish > the two case OwnCats and LikeCats > Not sure whether it's already implemented in fluent interface > > > On Sun, Sep 14, 2008 at 9:44 PM, <[EMAIL PROTECTED]> wrote: > >> >> I don't think it is so off-topic... >> >> I dont't want to start a general discussion about design approach, but >> there should be at least an example a little bit more complex than the >> current at http://code.google.com/p/fluent-nhibernate/wiki/QuickStart >> >> I really liked these posts here: >> >> http://blog.jagregory.com/2008/08/08/introducing-fluent-nhibernate/ >> >> http://www.iamnotmyself.com/2008/08/07/SkinningTheCatWithFluentNHibernate.aspx >> >> http://blogs.hibernatingrhinos.com/nhibernate/archive/2008/08/15/a-fluent-interface-to-nhibernate---part-3---mapping.aspx >> >> Do you know the people who wrote them. I would suggest we move them in >> a sctructered way inside the WIKI. I would spend some time on this, as >> I need to get a hold of this topic anyway. We just need to check A) >> which kind of "draft account" I need for the (or a) wiki, and if the >> authors agree with this.. >> >> But perhaps you are right, we should move this topic to mail or to the >> Wiki... >> Chris >> >> >> >> > > > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Fluent NHibernate" group. To post to this group, send email to fluent-nhibernate@googlegroups.com To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/fluent-nhibernate?hl=en -~----------~----~----~----~------~----~------~--~---