The FirstProject example was originally written against SQLExpress, but I'll have a test tonight.
On Thu, Feb 12, 2009 at 2:32 PM, x97mdr <[email protected]> wrote: > > I renamed the Relation field back to ParentRelation and modified the > VariableMap back to this: > > public class VariableMap : ClassMap<Variable> > { > public VariableMap() > { > Id(x => x.Id); > References(x => x.ParentRelation) > .WithForeignKey("Relation_id") > .TheColumnNameIs("Relation_id") > .Cascade.All(); > } > } > > The appropriate columns are now created, but the cascading no longer > works. :( Relation seems to have been created, but the Variable > information was not. Is there a bug in here somewhere? > > Actually, I just tried running the FirstExample project from the trunk > again (which I was using as an example for my own project here). When > I replaced the configuration to point to SQL Server (see below for > modified CreateSessionFactory method) the References relationship does > not work there either ... I really think there is a bug here with the > References or HasMany methods, either that or its my configuration, > but my config is pretty basic. Try the FirstExample project but > examine the database after it has run (save it to SQL Server or > something) and see if the information is actually persisted in the > tables or not. > > private static ISessionFactory CreateSessionFactory() > { > return Fluently.Configure() > .Database(MsSqlConfiguration > .MsSql2005 > .ConnectionString(x => x.Is > (@"Server=BUMBLEBEE > \SQLEXPRESS;Database=EditImputation;Trusted_Connection=True;")) > .ShowSql()) > .Mappings(m => > m.FluentMappings.AddFromAssemblyOf<Program>()) > .ExposeConfiguration(BuildSchema) > .BuildSessionFactory(); > } > > > On Feb 12, 3:59 am, James Gregory <[email protected]> wrote: > > Sorry, that should have been WithKeyColumn rather than TheColumnNameIs. > > > > On Thu, Feb 12, 2009 at 8:58 AM, James Gregory <[email protected] > >wrote: > > > > > Your table is ending up with three columns because the HasMany in > Relation > > > is called Variables but the other side of the relation is called > > > ParentRelation; this is causing FNH to not see them as two sides of the > same > > > relationship. Try calling TheColumnNameIs on your ParentRelation and > giving > > > it "Relation_id". > > > Making that change might actually fix your saving issue. > > > > > On Thu, Feb 12, 2009 at 12:35 AM, x97mdr <[email protected]> > wrote: > > > > >> OK I changed my test fixture to this: > > > > >> [TestMethod] > > >> public void Can_Add_Variable() > > >> { > > >> var relation = new Relation(); > > >> var variable = new Variable(); > > >> relation.AddVariable(variable); > > > > >> using (var session = sessionProvider.CreateSession()) > > >> { > > >> using (var transaction = session.BeginTransaction()) > > >> { > > >> session.Save(relation); > > >> transaction.Commit(); > > >> } > > >> } > > >> } > > > > >> And the relation is saving, but the variable is not. So no cascading > > >> is happening. Then I modified the VariableMap class to this: > > > > >> public class VariableMap : ClassMap<Variable> > > >> { > > >> public VariableMap() > > >> { > > >> Id(x => x.Id); > > >> References(x => x.ParentRelation) > > >> .Cascade.All(); > > >> } > > >> } > > > > >> And it works, though my Variable table has three columns Id, > > >> ParentRelation_id and Relation_id where Relation_id remains NULL. > > > > >> Any thoughts? It's weird that I had to ask the Cascade.All() to the > > >> References column of the variable when it doesn't appear to be needed > > >> based on the FirstExample project. Also, weird that there are three > > >> columns on the Variable table when I would expect at most 2 columns > > >> since ParentRelation is set to be the References in the mapping. > > > > >> Would it be helpful for me to post my entire solution I wonder? > > > > >> Thansk so much for your suggestions thus far. > > > > >> On Feb 11, 7:08 am, James Gregory <[email protected]> wrote: > > >> > Yes, you need to explicitly commit a transaction otherwise it gets > > >> rolled > > >> > back in the dispose. Although sometimes it can seem like things are > > >> being > > >> > saved, generally cascades don't occur until the transaction is > > >> committed. > > > > >> > On Wed, Feb 11, 2009 at 12:02 PM, x97mdr <[email protected]> > > >> wrote: > > > > >> > > I have tried it at times (though honestly, I have tried so many > things > > >> > > now I'm not sure what I have tried together). Originally I > started > > >> > > out with a repository pattern object that automatically wrapped > the > > >> > > save in a transaction and committed it. I will give it another > shot > > >> > > tonight though, I don't have the project here at work. > > > > >> > > When the IDbTransaction is in a using statement do you still have > to > > >> > > commit it? > > > > >> > > On Feb 11, 6:11 am, James Gregory <[email protected]> > wrote: > > >> > > > You're not committing the transaction after your save. Have you > > >> tried > > >> > > that? > > > > >> > > > On Wed, Feb 11, 2009 at 11:03 AM, x97mdr < > [email protected]> > > >> > > wrote: > > > > >> > > > > Hrm, I just tried that and no dice. :( > > > > >> > > > > I was assigning the IDs because originally I wanted > string-based > > >> > > > > identifiers (I'm applying this to a legacy database) so I had > to > > >> > > > > assign the Id (or key name) to the objects. > > > > >> > > > > This is sooo frustrating, It seems like such a simple problem. > > >> I'll > > >> > > > > turn on full log4net later today and see what happens with it. > > > > >> > > > > Any other suggestions in the meantime? > > > > >> > > > > On Feb 10, 9:35 pm, Paul Batum <[email protected]> wrote: > > >> > > > > > Hi there, > > > > >> > > > > > I'm not sure what the problem is, but everything you are > doing > > >> seems > > >> > > > > > perfectly normal EXCEPT assigning the ID's. Have you tried > it > > >> without > > >> > > > > > assigning IDs explicitly? > > > > >> > > > > > Paul Batum > > > > >> > > > > > On Wed, Feb 11, 2009 at 1:24 PM, x97mdr < > > >> [email protected]> > > >> > > > > wrote: > > > > >> > > > > > > I am just starting to learn NHibernate now, I tried > setting up > > >> a > > >> > > very > > >> > > > > > > simple example to play around and for some reason I cannot > get > > >> > > > > > > cascading to work. I followed the example of the > FirstExample > > >> > > project > > >> > > > > > > and tried to apply it to my domain. I have two classes > with a > > >> > > one-to- > > >> > > > > > > many relationship between them. They are Variable and > > >> Relation > > >> > > > > > > (related to metadata we store in our environment). > > > > >> > > > > > > The problem is that when I run the unit test which should > save > > >> the > > >> > > > > > > relation and the related variable only the relation ever > gets > > >> > > saved, > > >> > > > > > > if at all. > > > > >> > > > > > > I have tried what seems to me to be every variation of the > > >> mappings > > >> > > to > > >> > > > > > > see if they would work but nothing has succeeded. The > weird > > >> thing > > >> > > is, > > >> > > > > > > the FirstExample project (for both SQLite and when I point > it > > >> to > > >> > > SQL > > >> > > > > > > Server Express) seem to work fine. There is something I > am > > >> > > > > > > misunderstanding in my mappings. I even tried switching > > >> between > > >> > > using > > >> > > > > > > Save and SaveOrUpdate on the session variable. I'm using > the > > >> trunk > > >> > > of > > >> > > > > > > the fluent-nhibernate project, including the nhibernate > > >> library in > > >> > > its > > >> > > > > > > tools directory (2.0.1) > > > > >> > > > > > > Any help is greatly appreciated and sorry if its a bit of > a > > >> newb > > >> > > > > > > question but its really bugging me! > > > > >> > > > > > > Here are the classes for reference: > > > > >> > > > > > > public class Variable : IEntity > > >> > > > > > > { > > >> > > > > > > public virtual long Id > > >> > > > > > > { > > >> > > > > > > get; > > >> > > > > > > set; > > >> > > > > > > } > > > > >> > > > > > > public virtual Relation ParentRelation > > >> > > > > > > { > > >> > > > > > > get; > > >> > > > > > > set; > > >> > > > > > > } > > >> > > > > > > } > > > > >> > > > > > > public class Relation : IEntity > > >> > > > > > > { > > >> > > > > > > public virtual long Id > > >> > > > > > > { > > >> > > > > > > get; > > >> > > > > > > set; > > >> > > > > > > } > > > > >> > > > > > > public virtual IList<Variable> Variables > > >> > > > > > > { > > >> > > > > > > get; > > >> > > > > > > set; > > >> > > > > > > } > > > > >> > > > > > > public Relation() > > >> > > > > > > { > > >> > > > > > > Variables = new List<Variable>(); > > >> > > > > > > } > > > > >> > > > > > > public virtual void AddQuestion(Variable item) > > >> > > > > > > { > > >> > > > > > > item.ParentRelation = this; > > >> > > > > > > Variables.Add(item); > > >> > > > > > > } > > >> > > > > > > } > > > > >> > > > > > > and here are the mappings: > > > > >> > > > > > > public class VariableMap : ClassMap<Variable> > > >> > > > > > > { > > >> > > > > > > public VariableMap() > > >> > > > > > > { > > >> > > > > > > Id(x => x.Id); > > >> > > > > > > References(x => x.ParentRelation); > > >> > > > > > > } > > >> > > > > > > } > > > > >> > > > > > > public class RelationMap : ClassMap<Relation> > > >> > > > > > > { > > >> > > > > > > public RelationMap() > > >> > > > > > > { > > >> > > > > > > Id(x => x.Id); > > >> > > > > > > HasMany(x => x.Variables) > > >> > > > > > > .Inverse() > > >> > > > > > > .Cascade.All(); > > >> > > > > > > } > > >> > > > > > > } > > > > >> > > > > > > I have a little session provider to configure everything > here: > > > > >> > > > > > > public class MySessionProvider > > >> > > > > > > { > > >> > > > > > > private NHibernate.ISessionFactory _sessionFactory; > > >> > > > > > > private NHibernate.Cfg.Configuration > _configuration; > > > > >> > > > > > > public MySessionProvider() > > >> > > > > > > { > > >> > > > > > > _sessionFactory = Fluently.Configure() > > >> > > > > > > .Database( > > > > >> MsSqlConfiguration.MsSql2005 > > >> > > > > > > > .ConnectionString(x > > >> => > > >> > > x.Is > > >> > > > > > > (@"Server=BUMBLEBEE > > > > >> \SQLEXPRESS;Database=EditImputation;Trusted_Connection=True;")) > > >> > > > > > > .ShowSql() > > >> > > > > > > ) > > >> > > > > > > .Mappings(x => > > >> > > > > > > x.FluentMappings.AddFromAssemblyOf<Relation>()) > > >> > > > > > > .ExposeConfiguration > > >> > > > > > > (StoreConfiguration) > > >> > > > > > > .BuildSessionFactory(); > > >> > > > > > > } > > > > >> > > > > > > private void > > >> StoreConfiguration(NHibernate.Cfg.Configuration > > >> > > > > > > configuration) > > >> > > > > > > { > > >> > > > > > > _configuration = configuration; > > >> > > > > > > } > > > > >> > > > > > > public NHibernate.ISession CreateSession() > > >> > > > > > > { > > >> > > > > > > return _sessionFactory.OpenSession(); > > >> > > > > > > } > > > > >> > > > > > > public void BuildSchema() > > >> > > > > > > { > > >> > > > > > > new NHibernate.Tool.hbm2ddl.SchemaExport > > >> > > > > > > (_configuration).Create(false, true); > > >> > > > > > > } > > >> > > > > > > } > > > > ... > > > > read more ยป > > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Fluent NHibernate" group. To post to this group, send email to [email protected] 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 -~----------~----~----~----~------~----~------~--~---
