Thanks, will do like you suggested. On May 20, 3:55 pm, José F. Romaniello <[email protected]> wrote: > Hi Luka, one of the first rule of thumb with nhibernate is that you *have* to > keep consistency in memory. > If your objects are not consistent in memory the will never be consistent in > the db or anywhere. > > The second thing to note is that you already have a Ticket loaded in memory, > so when you call *Session.Get<Ticket>(ticketId);* > you are not going to the DB again... this operation will give you the same > instance of the object that is in the variable t.. > Because the session keep tracks of the entities. > > Where to go from here? If you have the collection properly mapped (and have > a cascade with save option), you can do something like this: > > using (var transaction = Session.BeginTransaction()) > { > var t = new Ticket(); > t.Title = "TestTicket"; > var ticketId = (Guid)Session.Save(t); > > var pe = new ProcessExec(); > * t.AddProcess(pe);* > > var ticket = Session.Get<Ticket>(ticketId); > transaction.Commit(); > > Assert.NotNull(ticket); > Assert.True(ticket.ProcessExecCollection.Count > 0); > } > > Or if you want to keep your former code, you can ensure in-memory > consistence as follows: > > using (var transaction = Session.BeginTransaction()) > { > var t = new Ticket(); > t.Title = "TestTicket"; > var ticketId = (Guid)Session.Save(t); > > var pe = new ProcessExec(); > pe.Ticket = t; > Session.Save(pe); > > var ticket = Session.Get<Ticket>(ticketId); > transaction.Commit(); > > Assert.NotNull(ticket); > Assert.True(ticket.ProcessExecCollection.Count > 0); > } > > you might change your Ticket property to something like this: > > public class ProcessExec > { > public Ticket Ticket { get { return ticket} set { ticket = value; > value.AddProcess(this); } } > > } > > public class Ticket > { > public ISet<ProcessExec> Process { get; set;} > > public void AddProcess(ProcessExec pe) > { > if(pe.Ticket == null || !pe.Ticket.Equals(this)) pe.Ticket = this; > Process.Add(pe); > } > > } > > Memory consistence-always remember that , and you will be safe. > > 2011/5/20 Luka <[email protected]> > > > > > > > > > Hi, I am having this problem.. > > > using (var transaction = Session.BeginTransaction()) > > { > > var t = new Ticket(); > > t.Title = "TestTicket"; > > var ticketId = (Guid)Session.Save(t); > > > var pe = new ProcessExec(); > > pe.Ticket = t; > > Session.Save(pe); > > > var ticket = Session.Get<Ticket>(ticketId); > > transaction.Commit(); > > > Assert.NotNull(ticket); > > Assert.True(ticket.ProcessExecCollection.Count > 0); > > } > > > Now the problem is this that the assert fails on > > Assert.True(ticket.ProcessExec.Count>0). > > But If I do Session.Refresh(ticket); just after the > > transaction.Commit(), everithing works fine. > > How to tell NHibernate that when I create new ProcessExec and set its > > ticket, to automatically update the ticket? > > > I need this because I do lots of stuff creating and selecting in a > > transaction. > > > Please help. > > > -- > > You received this message because you are subscribed to the Google Groups > > "nhusers" 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/nhusers?hl=en.
-- You received this message because you are subscribed to the Google Groups "nhusers" 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/nhusers?hl=en.
