Может ли iBatis.NET работать с ICollection?
-
03-07-2019 - |
Вопрос
Этот вопрос связан с другим вопросом, который у меня есть: Использование 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.