Dibware.StoredProcedureFramework.Tests.UnitTests.StoredProcedures.NotFullyConstructedStoredProcedure.EraseProcedureNameValue C# (CSharp) Method

EraseProcedureNameValue() private method

private EraseProcedureNameValue ( ) : void
return void
        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");
            }
        }