Domanda

Questa domanda riguarda un'altra domanda che ho: Utilizzo di iBATIS.NET con interfacce di raccolta personalizzate generiche e Unity

Il problema sembra essere che iBATIS.NET popolerà solo una raccolta personalizzata (ovvero QueryForObject (" Select_Foo ") che ha una raccolta personalizzata di barre) se si tratta di un'istanza concreta di raccolta personalizzata e non di un'interfaccia. Qualcuno sa se questa è una limitazione di iBATIS.NET o se esiste un modo per farlo?

Grazie,

Paul

È stato utile?

Soluzione

Se ti ho capito bene, ti piacerebbe avere il pieno controllo del modo in cui iBatis esegue il mapping a un oggetto.

Puoi farlo con ITypeHandlerCallback . Cerca una descrizione completa in documentazione PDF nella sezione " 3.5.5. Gestori di tipi personalizzati " ;.

Ho fatto qualcosa di simile con DataTables. L'implementazione potrebbe essere simile a questa:

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; }
}

Un'ultima nota: iBatis va bene per la creazione di oggetti di trasferimento dati (DTO). Se provi qualcosa come sopra, potresti già spostarti verso un approccio a oggetti business. Questo potrebbe essere doloroso con iBatis. Attualmente (beh ... già da qualche mese, per mancanza di tempo) sto valutando NHibernate come alternativa. Penso che NHibernate stia gestendo gli approcci di business object molto più agevolmente di quanto non faccia iBatis.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top