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.

Reply via email to