Ok, I've found OnValidateFieldValue, which would actually be even better, since it's more representative of what I want to do, and provides a bool value to say yay or nay. This one also only is triggered by setting the ID value though.
For setting the entity reference, what I've found is that I can use PreProcessValueToSet for the old value, and OnRelatedEntitySet for the new value.
So what I'm working with at the moment is:
private LookupCollateralStatusEntity _prevCollateralStatus;
protected override void PreProcessValueToSet(SD.LLBLGen.Pro.ORMSupportClasses.IEntityField2 fieldToSet, ref object valueToSet)
{
base.PreProcessValueToSet(fieldToSet, ref valueToSet);
if (fieldToSet.Name == CollateralFields.CollateralStatusId.Name)
{
_prevCollateralStatus = (LookupCollateralStatusEntity)
this.Fields[fieldToSet.Name].CurrentValue;
if (valueToSet != null)
HandleStateChange(_prevCollateralStatus, (LookupCollateralStatusEntity)valueToSet);
_prevCollateralStatus = null;
}
}
protected override void OnRelatedEntitySet(SD.LLBLGen.Pro.ORMSupportClasses.IEntity2 relatedEntity, string fieldName)
{
bool baseValidate = base.OnValidateFieldValue(fieldIndex, value);
if (!baseValidate)
return false;
if (fieldIndex == (int)CollateralFieldIndex.CollateralStatusId)
{
if (_prevCollateralStatus != null)
HandleStateChange(_prevCollateralStatus, (LookupCollateralStatusEntity)value);
_prevCollateralStatus = null;
}
return true;
}
This is a bit ugly. Is there a better way to do this that anyone can suggest?