Question

Cette question se rapporte à une autre question que j'ai: Utilisation de iBATIS.NET avec des interfaces de collection génériques personnalisées et Unity

Le problème semble être que iBATIS.NET ne remplira une collection personnalisée (c'est-à-dire QueryForObject ("Select_Foo") qui contient une collection personnalisée de Bars) s'il s'agit d'une instance concrète de la collection personnalisée et non d'une interface. Est-ce que quelqu'un sait s'il s'agit d'une limitation d'iBATIS.NET ou s'il existe un moyen de le faire?

Merci,

Paul

Était-ce utile?

La solution

Si je vous ai bien compris, vous aimeriez avoir un contrôle total sur la façon dont iBatis est mappé sur un objet.

Vous pouvez le faire avec la ITypeHandlerCallback . . Recherchez une description complète dans Documentation PDF dans la section " 3.5.5. Gestionnaires de types personnalisés ".

J'ai fait quelque chose de similaire avec DataTables. Votre implémentation pourrait ressembler à ceci:

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

Une dernière remarque: iBatis convient parfaitement à la création d’objets de transfert de données (DTO). Si vous essayez quelque chose comme ci-dessus, vous pourriez déjà adopter une approche d'objet métier. Cela pourrait devenir douloureux avec iBatis. Actuellement (enfin ... depuis quelques mois déjà, faute de temps), je suis en train d’évaluer NHibernate. Je pense que NHibernate gère beaucoup mieux les approches relatives aux objets métier que ne le fait iBatis.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top