2009-03-03 11 views
1

Diese Frage ist in Bezug auf eine andere Frage, die ich habe: Using iBATIS.NET with generic custom collection interfaces and UnityKann iBATIS.NET mit ICollection arbeiten?

Das Problem, dass iBATIS.NET nur eine benutzerdefinierte Sammlung (dh QueryForObject („Select_Foo“), die eine individuelle Sammlung von Bars hat) bevölkern zu sein scheint, wenn Es ist eine konkrete Instanz der benutzerdefinierten Sammlung, keine Schnittstelle. Weiß jemand, ob dies eine Einschränkung von iBATIS.NET ist oder ob es eine Möglichkeit gibt, dies zu tun?

Danke,

Paul

Antwort

1

Wenn ich Sie verstanden Recht dann würden Sie die volle Kontrolle über die Art und Weise, wie iBatis Karten auf ein Objekt erhalten möchte.

Sie können dies mit der ITypeHandlerCallback tun. Eine vollständige Beschreibung finden Sie unter PDF documentation im Abschnitt "3.5.5. Custom Type Handlers".

Ich habe etwas ähnliches mit DataTables getan. Ihre Umsetzung könnte ähnlich aussehen:

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

Ein letzter Hinweis: iBatis ist gut für den Aufbau von Datenübertragungsobjekte (DTOs). Wenn Sie etwas wie oben versuchen, bewegen Sie sich bereits in Richtung eines Business-Objekt-Ansatzes. Dies könnte mit iBatis schmerzhaft werden. Derzeit (naja ... schon seit ein paar Monaten, wegen Zeitmangel) bewerte ich NHibernate als Alternative. Ich denke, dass NHibernate Business-Objekt-Ansätze viel reibungsloser abwickelt als iBatis.

Verwandte Themen