Pregunta

Esta pregunta está relacionada con otra pregunta que tengo: Uso de iBATIS.NET con interfaces de colección personalizadas y Unity

El problema parece ser que iBATIS.NET solo llenará una colección personalizada (es decir, QueryForObject (" Select_Foo ") que tiene una colección personalizada de barras) si se trata de una instancia concreta de colección personalizada, no una interfaz. ¿Alguien sabe si esto es una limitación de iBATIS.NET o si hay una manera de hacerlo?

Gracias,

Paul

¿Fue útil?

Solución

Si te entendí bien, te gustaría tener un control total sobre la forma en que iBatis se asigna a algún objeto.

Puede hacer esto con ITypeHandlerCallback . Consulte la descripción completa en documentación PDF en la sección " 3.5.5. Controladores de tipos personalizados " ;.

He hecho algo similar con DataTables. Su implementación podría parecerse a esto:

class DataTableBuilder : ITypeHandlerCallback
{
    public object GetResult(IResultGetter getter)
    {
        IDataReader reader = getter.DataReader;

        // (A) define whatever type you want to

        // (B) read rows from DataReader and populate your type from (A)
        while (reader.Read())
        {
            // iterate over the columns of the current row
            for (int i = 0; i < reader.FieldCount; i++)
            {
               // populate your type from (A)
            }                    
        }
        return ...;   // return your type from (A)
    }

    // implement the other members of ITypeHandlerCallback
    // the implementation below actually worked for me
    public object NullValue { get { return null; } }
    public void SetParameter(IParameterSetter setter, object parameter) { }
    public object ValueOf(string s) { return s; }
}

Una última nota: iBatis está bien para construir objetos de transferencia de datos (DTO). Si intenta algo como lo anterior, es posible que ya esté avanzando hacia un enfoque de objeto de negocio. Esto podría ser doloroso con iBatis. Actualmente (bueno ... ya hace unos meses, debido a la falta de tiempo) estoy evaluando NHibernate como alternativa. Creo que NHibernate está manejando los enfoques de objetos de negocios mucho más suavemente que iBatis.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top