A good way is to have an IsDirty flag on the object and have all the setable properties update that flag if they are changed. Have the flag initialized to false when the object is loaded.
An example property would look like this:
public string Name {
get { return _name; }
set {
_name = value;
_isDirty = true;
}
}
Then when you get the object back you can simply check, Customer.IsDirty
to see if you need to commit the changes to the database. And as an added bonus you get some humour from the resulting text :) (oh those dirty customers)
You can also opt to always save the object regardless of whether it has been changed, my preference is to use a flag.