2009-03-03 2 views
1

Этот вопрос в отношении к другому вопросу у меня есть: Using iBATIS.NET with generic custom collection interfaces and UnityМожет ли iBATIS.NET работать с ICollection?

Проблема, кажется, что iBATIS.NET будет только заполнить пользовательскую коллекцию (т.е. QueryForObject («Select_Foo»), который имеет собственный сбор Bars), если это конкретный экземпляр пользовательской коллекции, а не интерфейс. Кто-нибудь знает, является ли это ограничением iBATIS.NET или если есть способ сделать это?

Спасибо,

Пол

ответ

1

Если я вам прямо, то вы хотели бы получить полный контроль над тем, как, как Ibatis сопоставлена ​​какой-то объект понятые.

Вы можете сделать это с помощью ITypeHandlerCallback. Посмотрите полное описание в разделе PDF documentation в разделе «3.5.5. Обработчики пользовательских типов».

Я сделал что-то подобное с DataTables. Ваша реализация может выглядеть следующим образом:

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

Последнее замечание: Ibatis прекрасно подходит для строительства объектов передачи данных (DTO). Если вы попробуете что-то вроде выше, вы уже можете перейти к бизнес-объекту. Это может стать болезненным с iBatis. В настоящее время (ну ... в течение нескольких месяцев, из-за нехватки времени) я оцениваю NHibernate как альтернативу. Я думаю, что NHibernate обрабатывает бизнес-объекты гораздо более плавно, чем iBatis.

Смежные вопросы