Cómo determinar la propiedad de tamaño para los parámetros de salida del procedimiento almacenado en la capa de acceso a datos C #

He hecho una capa de acceso a datos modelada sin vergüenza a partir de la implementación ActiveRecord de Castle Project. Para que pueda ser aceptado, debe ser compatible con la extensa biblioteca de procedimientos almacenados en uso en mi organización, que se ha escrito para usar cada estructura de entrada / salida imaginable, incluidos los valores de retorno y los parámetros de salida de cada tipo de datos concebible.

Mi problema está en desarrollar el código que agrega el parámetro de salida a la colección de parámetros del objeto Comando utilizado para ejecutar el procedimiento almacenado. Ahora mismo estoy usando un gran valor predeterminado, esperando que sea suficiente para detectar todos los casos, pero esto se siente mal.

¿Cómo puedo saber la longitud del parámetro de salida por adelantado?

Aquí está mi clase DAL, usando atributos para denotar el parámetro de salida:

 [StoredProcedure("usp_PostARTransaction", OperationType.Insert)]
    public class ARTranPost : DataObjectBase<ARTranPost>
    {
        [StoredProcedureParameter("sARTranID",OperationType.Insert,ParameterDirection.Output)]
        public string ARTranID {get;set;}
        [StoredProcedureParameter("sDueDate", OperationType.Insert, ParameterDirection.Input)]
        public string DueDate { get; set; }
        [StoredProcedureParameter("sPostDate", OperationType.Insert, ParameterDirection.Input)]
        public string PostDate { get; set; }

    }

¿Necesito usar SMO o alguna otra biblioteca para obtener la longitud de la base de datos?