Вопрос

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

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

Спасибо,

Пол

Это было полезно?

Решение

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

Вы можете сделать это с помощью Обратный вызов ITypeHandlerCallback.Ознакомьтесь с полным описанием в Документация в формате PDF в разделе "3.5.5.Обработчики пользовательских типов".

Я сделал нечто подобное с таблицами данных.Ваша реализация может выглядеть примерно так:

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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top