IBATIS.NET peut-il fonctionner avec ICollection?
-
03-07-2019 - |
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
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.