2009-03-03 7 views
1

Cette question est par rapport à une autre question que j'ai: Using iBATIS.NET with generic custom collection interfaces and UnityEst-ce que iBATIS.NET peut fonctionner avec ICollection?

Le problème semble être que iBATIS.NET ne remplira une collection personnalisée (c.-à-QueryForObject (« Select_Foo ») qui a une collection personnalisée de barres) si c'est une instance concrète de collection personnalisée pas une interface. Est-ce que quelqu'un sait si c'est une limitation de iBATIS.NET ou s'il y a une façon de le faire?

Merci,

Paul

Répondre

1

Si je vous comprends bien, vous souhaitez obtenir un contrôle total sur la manière dont des cartes iBatis à un objet. Vous pouvez le faire avec le code ITypeHandlerCallback. Jetez un oeil à une description complète dans le PDF documentation dans la section "3.5.5 Handler Handlers".

J'ai fait quelque chose de similaire avec DataTables. Votre mise en œuvre 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 note: iBatis est très bien pour la construction d'objets de transfert de données (DTO). Si vous essayez quelque chose comme ci-dessus, vous pouvez déjà vous diriger vers une approche d'objet métier. Cela pourrait être douloureux avec iBatis. Actuellement (enfin ... depuis quelques mois, faute de temps) j'évalue NHibernate comme alternative. Je pense que NHibernate gère les approches des objets métier de manière beaucoup plus fluide qu'iBatis.

Questions connexes