Может ли iBATIS.NET работать с ICollection? - PullRequest
1 голос
/ 03 марта 2009

Этот вопрос связан с другим моим вопросом: Использование iBATIS.NET с универсальными пользовательскими интерфейсами сбора и Unity

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

Спасибо

Пол

1 Ответ

1 голос
/ 30 марта 2009

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

Вы можете сделать это с помощью ITypeHandlerCallback . Ознакомьтесь с полным описанием в PDF-документации в разделе "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.

...