You should not be assigning a new collection to replace the old one. If you retain the collections that NHibernate gives you, it can be aware of changes. I think what you might want to do is:
Code:
myFoo.CustomersLocations.Clear();
foreach( CustomersLocation location in newChildObjectCollection )
{
myFoo.CustomersLocations.Add( location );
}
session.Save( myFoo );
The Clear() call should mark all the old records to be deleted, so any that you Add() will be all that's left. If there's a better way, I'd love to hear it, but this is what I've done in the past.