While I agree with Gunnar that Dynamic Component is a much better solution...
Why not simply Flush the Session? On Friday, December 4, 2015 at 7:58:40 PM UTC-5, Felipe Oriani wrote: > > Gunnar Liljas, > > The interception we have implemented takes the transaction as the > argument. So, we've setted the same transaction for the command, for sample: > > transaction.EnList(cmd); > cmd.ExecuteNonQuery(); > > The transaction is commited after the action on the controller of web api > (actionexecuted method of an attribute). > > Is there any suggestion to improve it? > > > > > On Fri, Dec 4, 2015 at 7:25 PM, Gunnar Liljas <[email protected] > <javascript:>> wrote: > >> To be honest, a static Queue<IDbCommand> sounds like a problem waiting >> to happen. How do you handle aborted transactions and how to you ensure >> that only commands belonging to a specific transaction are executed? >> >> 2015-12-04 21:06 GMT+01:00 Maximilian Haru Raditya <[email protected] >> <javascript:>>: >> >>> Would session.Flush() between session.Save() and >>> session.Connection.CreateCommand() work out for you? >>> On Dec 4, 2015 2:56 AM, "Felipe Oriani" <[email protected] >>> <javascript:>> wrote: >>> >>>> Hello guys, I have a problem using NHibernate, but first let me explain >>>> the scenario. >>>> >>>> We have a web application which allows the user to manage fields over >>>> the entities. For sample, we have a City table with fixed columns (Id, >>>> Name >>>> and State), then user can define new columns on the entity (city) by a >>>> configuration scren we have developed. This configuration screen runs some >>>> sql statements to manage the fields (Alter Table to create an drop columns >>>> on the tables) which we call as "flex field". >>>> >>>> However, these flex fields are no mapped by nhibernate, so, we need to >>>> manage the information on these fields manually by sql statement. The code >>>> bellow shows how we do it in a scenario when we are creating a new entity >>>> (city): >>>> >>>> // start a transaction from asp.net mvc attribute (ActionExecuting) >>>> var transaction = session.BeginTransaction(); >>>> >>>> // save a new entity on the data layer >>>> session.Save(city); >>>> >>>> // get a IDbCommand instance to manage the flex fields >>>> var cmd = session.Connection.CreateCommand(); >>>> >>>> // define the sql update to update the flex fields passing the id of >>>> the entity >>>> cmd.CommandText = "update city set flex1=@flex1, flex2=@flex2 where >>>> id = @id"; >>>> >>>> // define all the parameters on the cmd here... >>>> >>>> // add the command on the nhibernate transaction object >>>> transaction.EnList(cmd); >>>> >>>> // execute the command >>>> cmd.ExecuteNonQuery(); >>>> >>>> // commit the transaction on the asp.net mvc attribute >>>> (ActionExecuted) >>>> transaction.Commit(); >>>> >>>> When we run this code, everything executes without any error. If we are >>>> updating a existent entity (City) the flex fields are updated fine, but >>>> the >>>> problem is when we are inserting a new entity (City), the update statement >>>> executed by command is not being executed, and we get all the flex field >>>> with null values. >>>> >>>> I supose when we are inserting, the command is been performed before >>>> the insert (on commit). Is there any way to force the commands on EnList >>>> Transaction be executed after all others statements, but on the same >>>> transaction? >>>> >>>> Thank you. >>>> >>>> >>>> >>>> >>>> -- >>>> ______________________________________ >>>> Felipe B Oriani >>>> [email protected] <javascript:> >>>> >>>> -- >>>> You received this message because you are subscribed to the Google >>>> Groups "nhusers" group. >>>> To unsubscribe from this group and stop receiving emails from it, send >>>> an email to [email protected] <javascript:>. >>>> To post to this group, send email to [email protected] >>>> <javascript:>. >>>> Visit this group at http://groups.google.com/group/nhusers. >>>> For more options, visit https://groups.google.com/d/optout. >>>> >>> -- >>> You received this message because you are subscribed to the Google >>> Groups "nhusers" group. >>> To unsubscribe from this group and stop receiving emails from it, send >>> an email to [email protected] <javascript:>. >>> To post to this group, send email to [email protected] >>> <javascript:>. >>> Visit this group at http://groups.google.com/group/nhusers. >>> For more options, visit https://groups.google.com/d/optout. >>> >> >> -- >> You received this message because you are subscribed to the Google Groups >> "nhusers" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to [email protected] <javascript:>. >> To post to this group, send email to [email protected] >> <javascript:>. >> Visit this group at http://groups.google.com/group/nhusers. >> For more options, visit https://groups.google.com/d/optout. >> > > > > -- > ______________________________________ > Felipe B Oriani > [email protected] <javascript:> > -- You received this message because you are subscribed to the Google Groups "nhusers" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at http://groups.google.com/group/nhusers. For more options, visit https://groups.google.com/d/optout.
