no. I mean sequence.

2009/9/15 Delucia <[email protected]>

> I'm not sure what exactly sequence-like mean. do you mean like identity
> columns in mssql? in any case what I mean is that the algorithm should be
> that the session factory reserves a range of keys by incrementing the
> next_hi and then this range will be available for all session to use on all
> entities and when the session factory consumes the range it reserves another
> one and so on.
> this is an easier algorithm than the current one that reserves a range per
> table and works better for winform applications.
>
> On Tue, Sep 15, 2009 at 12:10 AM, Fabio Maulo <[email protected]>wrote:
>
>> do you mean a sequence-like generator ?
>>
>> 2009/9/14 Delucia <[email protected]>
>>
>>>
>>> Fabio, you're absolutely right. I meant winform application in my
>>> example. I know that bigint has a lot of room but what about saving
>>> trips to the database.
>>>
>>> I have not looked at the HiLo implementation in NH but I think what is
>>> happening is that the SessionFactory is keeping the count of the last
>>> used id per table. so  from the above example:
>>>
>>> using (var session = SessionSource.CreateSession())
>>> {
>>>    using (session.BeginTransaction())
>>>   {
>>>       var customer = new Customer("Joe");
>>>
>>>         // this is asking the session factory for the next id
>>>        // the sesion factory has nothing so it increments the next_hi
>>> in the database and returns 1001
>>>        session.SaveOrUpdate(customer);
>>>
>>>        var customer2 = new Customer("Shmoe");
>>>        // this time the session factory has an availabe id value for
>>> the Customer entity type
>>>        // and returns 1002
>>>        session.SaveOrUpdate(customer2);
>>>
>>>       var employee = new Employee("Jack");
>>>
>>>       // for this entity type the session factory has no value and it
>>> has to increment the next_hi in the database
>>>       // and return 2001
>>>       session.SaveOrUpdate(employee);
>>>   }
>>>
>>> }
>>>
>>>
>>> I think this is not only inefficient but unnecessarily complicated and
>>> this complexity effects generating id values outside NH (you have to
>>> think about SSIS packages and what not). I think an easier and more
>>> effiect alternative if the SessionFactory does not keep track of id
>>> per table but per database. This way the third call to save the
>>> employee will return 1003 instead of 2002 and save a trip to the
>>> database and use less keys. In addition it is easier to implement
>>> outside NH because it doesn't have to know about the table it is
>>> accessing.
>>>
>>>
>>> On Sep 14, 6:09 pm, Fabio Maulo <[email protected]> wrote:
>>> > btw Delucia that is an improvement of HighLow defined in ORM theory.The
>>> > target of the improvement is : has a less fragmentation per table.
>>> >
>>> > In winform and 2 physical  tiers you should use a little max-low (like
>>> 99)
>>> >
>>> > 2009/9/14 Delucia <[email protected]>
>>> >
>>> >
>>> >
>>> >
>>> >
>>> > > Currently if I want to insert an object graph that has 2 entities
>>> that use
>>> > > HiLo for their Id, NH session will go to the database for two times,
>>> one
>>> > > time for each entity, and increment the next_hi count. I was assuming
>>> that
>>> > > the session will have to go once to the database and reserve a range
>>> to be
>>> > > used for all entities since all entities are using the same next_hi
>>> value
>>> > > that will guarantee they will not collide. here is an example:
>>> > >    using (var session = SessionSource.CreateSession())
>>> > >             {
>>> >
>>> > >                 using (session.BeginTransaction())
>>> > >                 {
>>> > >                         var customer = new Customer("Joe");
>>> >
>>> > >                         session.SaveOrUpdate(customer);
>>> >
>>> > >                         var employee = new Employee { FirstName =
>>> "Sue",
>>> > > LastName = "Wong" };
>>> >
>>> > >                         session.SaveOrUpdate(employee);
>>> > >                     }
>>> >
>>> > >                     session.Transaction.Commit();
>>> > >                 }
>>> > >             }
>>> >
>>> > > Given the max_Lo is set to 1000, this code will go to the database
>>> twice to
>>> > > increment the next_hi one time for the customer and one time for the
>>> > > employee. I think it should increment it only once per session.
>>> >
>>> > --
>>> > Fabio Maulo- Hide quoted text -
>>> >
>>> > - Show quoted text -
>>>
>>>
>>
>>
>> --
>> Fabio Maulo
>>
>>
>>
>>
>
> >
>


-- 
Fabio Maulo

--~--~---------~--~----~------------~-------~--~----~
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