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]> 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]>: > >> 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]> 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] >>> >>> -- >>> 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. >>> >> -- >> 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. >> > > -- > 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. > -- ______________________________________ Felipe B Oriani [email protected] -- 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.
