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); >> > > > > > > } >> > > > > > > } >> > >> > > > > > > And I run everything in a unit test like this: >> > >> > > > > > > [TestMethod] >> > > > > > > public void Can_Add_Variable() >> > > > > > > { >> > > > > > > var relation = new Relation(); >> > > > > > > relation.Id = 9; >> > >> > > > > > > var variable = new Variable(); >> > > > > > > variable.Id = 99; >> > >> > > > > > > relation.AddQuestion(variable); >> > >> > > > > > > using (var session = >> sessionProvider.CreateSession()) >> > > > > > > { >> > > > > > > using (var transaction = >> session.BeginTransaction()) >> > > > > > > { >> > > > > > > session.Save(relation); >> > > > > > > } >> > > > > > > } >> > > > > > > } >> >> >> > --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---
