Hi,
I am Made Some small Modifications to the NHibernate
Code. Needed Help as to if I am Going in the Right
Direction. I would also Highly appreciate any
Critsisims or Suggestions. Pls also Let Me Know if
This would affect the Exisisting Code in Anyway. 


Problem Statement: I needed Dynamic Updates to Work
even If I dont Load the Object in the same session.

Solution: 
I will be creating an IClass Interface. This will have
One function called GetDirtyColumns. 

All the Entity class Files implement this interface.
Apart from all Properties Entity Class Files will also
have a bool array which will keep a track of all
Changed Properties. This can be done by modifying the
Set Funtion of all Properties.

Now I will pass this array to the EntityPersister
Class. This will now work as Dynamic Update Currently
works.
For My modified version of updatw kindly have  alook
at the attached Text File.



Regards

Prasanth Kumar

__________________________________________________
Do You Yahoo!?
Tired of spam?  Yahoo! Mail has the best spam protection around 
http://mail.yahoo.com 
public override void Update( object id, object[ ] fields, int[ ] dirtyFields, 
object[ ] oldFields, object oldVersion, object obj, ISessionImplementor session 
)
{
        //note: dirtyFields==null means we had no snapshot, and we couldn't get 
one using select-before-update
        //oldFields==null just means we had no snapshot to begin with (we might 
have used select-before-update to get the dirtyFields)
        bool[ ] propsToUpdate;
        SqlString updateString;

        if( UseDynamicUpdate && dirtyFields != null )
        {
                propsToUpdate = GetPropertiesToUpdate( dirtyFields );
                updateString = GenerateUpdateString( propsToUpdate, oldFields );
                //don't need to check property updatability (dirty checking 
algorithm handles that)
        }
        else
        {
                //This will happen if Dynamic Update is set True and Dirty 
Field are NULL. 
                //ie: Object not loaded in the same session.
                //The Only Flip side of this is if all Fields are NULL then the 
Object throws an Error.
                if(UseDynamicUpdate)
                {
                        //This is a IClass Interface. Typecasting the Object to 
the IClass Interface.
                        IClass entity = (IClass)obj;
                                        
                        //Geting a list of Dirty Properties.
                        propsToUpdate = entity.getDirtyProperties();
                                        
                        //Genrating the Update string. 
                        updateString = GenerateUpdateString( propsToUpdate, 
oldFields );
                }
                else
                {
                        propsToUpdate = PropertyUpdateability;
                        updateString = SqlUpdateString;
                }
        }
        Update( id, fields, oldFields, propsToUpdate, oldVersion, obj, 
updateString, session );
}

Reply via email to