You can't use a Session to handle this scenario as-is. You'll have to go
lower-level.

    Diego


On Tue, Sep 14, 2010 at 14:47, Corey Coogan <[email protected]> wrote:

> I have a scenario that I commonly run into.  It's simple to do with a
> standard ADO Transaction, but not so much with NH (that I know of).
>
> I have 2 tables to update.  The first contains profile information
> (Profile) and the other (Work) contains records changes that need to
> be made and the status of those changes.  For each update to the
> Profile table, there will be an update to the status on the Work
> table.
>
> - If the update to the Profile table fails, I need to update the
> status on the Work table.
> - If the update to the Profile table succeeds, and the update to the
> Work table fails, I need to rollback the transaction.
>
> The problem is that I don't know if the update to the Profile table
> failed until I commit the transaction.  I tried to do a Flush on the
> Profile to catch the exception so I could write the status to the Work
> table, but then my Commit fails with the exception caused from the
> Profile update.
>
> How can I handle this?  In a typical ADO Transaction, my first call
> will throw, but I can catch and still update the other tables in the
> transaction.
>
> Here's sort of what my code looks like - pretty standard.  This is not
> my actual code, so please focus on the problem, not that I'm not
> disposing my transaction or closing my session ;) :
>
>
> try
> {
>        ITransaction trans = _session.BeginTransaction();
>
>        var work = _repo.GetWork();
>        var profile = _repo.GetProfile(work.ProfileId);
>
>        try
>        {
>                profile.UpdateWithNewValues(work);
>                _session.SaveOrUpdate(profile);
>                _session.Flush();
>                work.Status = "Success";
>
>        }catch{
>           work.Status = "Failure";
>        }
>
>        _session.SaveOrUpdate(work);
>        trans.Commit();
>
> }catch{
>
>        trans.Rollback();
>
> }
>
> I realize that Flush() is not going to work, but I don't know how else
> to do this.
>
> --
> 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]<nhusers%[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.

Reply via email to