private void EraseProcedureNameValue()
{
// This does not work!
bool resetProcedureName = false;
var baseType = GetTypeOfStoredProcedureBase();
if (baseType != null)
{
PropertyInfo pi = baseType.GetProperty("ProcedureName",
BindingFlags.Public |
BindingFlags.NonPublic |
BindingFlags.Instance | BindingFlags.SetProperty);
if (pi != null && pi.GetSetMethod() != null)
{
pi.SetValue(this, "", null);
resetProcedureName = true;
}
if (resetProcedureName == false)
{
var stateFieldInfo = baseType.GetField("_state", BindingFlags.NonPublic | BindingFlags.Instance);
if (stateFieldInfo != null)
{
var state = (StoredProcedureBaseState)stateFieldInfo.GetValue(this);
object boxedState = state;
var stateType = stateFieldInfo.FieldType;
FieldInfo fieldInfo =
stateType.GetField("ProcedureName",
BindingFlags.Public | BindingFlags.Instance);
if (fieldInfo != null)
{
fieldInfo.SetValue(boxedState, "");
resetProcedureName = true;
}
}
}
if (!resetProcedureName) throw new InvalidOperationException("failed to reset procedure Name");
}
}