MemberMapper. Чего дополнительно хочется.
От: Sashko Россия http://www.dc.baika.ru/
Дата: 24.01.06 05:22
Оценка: 21 (1)
Попробовав BLT захотелось следующих возможностей связанных с Mapping'ом значений из программы в базу и обратно.

1. Хочется иметь возможность для типа задавать свой mapper'ер по умолчанию. Сейчас поиск mapper'ов по умолчанию происходит в MemberMapper.CreateMemberMapper(MapMemberInfo mi). Не совсем понятно, зачем например, если я пишу под Oracle, искать среди mapper'ов для MS'ых Sql типов. Может поиск mapper'ов по умолчанию для специфичных типов вынести в IDataProvider. В общем хочется какой-то механизм позволяющий подпихивать свой MemberMapper который выбирался бы по умолчанию.

2. Map'ить не только member'ы бизнес объектов но и простые параметры. То есть на ряду с

IDbDataParameter[] DbManager.CreateParameters(object obj, params IDbDataParameter[] commandParameters)

иметь возможность создавать IDbDataParameter с object'а, предварительно выполнив его mapping. Добавить эту возможность в DataAccessor. То есть, допустим определён абстрактный метод

public abstract class TPTAccessor : DataAccessor<TopologyPropertyType>
{
    public abstract int SomeSproc(int intValue, Guid guidValue);
    // ...
}

В реализации этого метода, перед вызовом "SomeSproc" производить mapping intValue и guidValue.
Re: MemberMapper. Чего дополнительно хочется.
От: apetrov  
Дата: 24.01.06 11:19
Оценка:
Еще заметил странность что DataAccessor<T>.Insert(...) Возвращет void хотя внутри это исполнется как ExcuteScalar, что вполне логично, так что этого тоже не хватает (прим: у себя я это пофиксел, при этом кода Custom Accessor'ов стало намного меньше)
Re: MemberMapper. Чего дополнительно хочется.
От: IT Россия linq2db.com
Дата: 24.01.06 14:47
Оценка:
Здравствуйте, Sashko, Вы писали:

S>1. Хочется иметь возможность для типа задавать свой mapper'ер по умолчанию. Сейчас поиск mapper'ов по умолчанию происходит в MemberMapper.CreateMemberMapper(MapMemberInfo mi). Не совсем понятно, зачем например, если я пишу под Oracle, искать среди mapper'ов для MS'ых Sql типов. Может поиск mapper'ов по умолчанию для специфичных типов вынести в IDataProvider. В общем хочется какой-то механизм позволяющий подпихивать свой MemberMapper который выбирался бы по умолчанию.


Подумаем. Я сейчас переношу с RFD поддержку xml-схем и пытаюсь её немножко расширить. Такой вариант с MemberMapper там можно будет предусмотреть.

S>2. Map'ить не только member'ы бизнес объектов но и простые параметры. То есть на ряду с


Это всё есть и работает.

S>
S>IDbDataParameter[] DbManager.CreateParameters(object obj, params IDbDataParameter[] commandParameters)
S>


Как раз второй параметр позволяет задавать отдельные параметры.

S>В реализации этого метода, перед вызовом "SomeSproc" производить mapping intValue и guidValue.


Это работает. Имена параметров будут @intValue и @guidValue, либо можно задать их специальным атрибутом.
Если нам не помогут, то мы тоже никого не пощадим.
Re[2]: MemberMapper. Чего дополнительно хочется.
От: IT Россия linq2db.com
Дата: 25.01.06 02:25
Оценка:
Здравствуйте, apetrov, Вы писали:

A>Еще заметил странность что DataAccessor<T>.Insert(...) Возвращет void хотя внутри это исполнется как ExcuteScalar, что вполне логично, так что этого тоже не хватает (прим: у себя я это пофиксел, при этом кода Custom Accessor'ов стало намного меньше)


Точно ExecuteScalar?
... << RSDN@Home 1.2.0 alpha rev. 0>>
Если нам не помогут, то мы тоже никого не пощадим.
Re[2]: MemberMapper. Чего дополнительно хочется.
От: Sashko Россия http://www.dc.baika.ru/
Дата: 25.01.06 02:30
Оценка:
Здравствуйте, IT, Вы писали:

S>>2. Map'ить не только member'ы бизнес объектов но и простые параметры. То есть на ряду с

IT>Это всё есть и работает.
S>>
S>>IDbDataParameter[] DbManager.CreateParameters(object obj, params IDbDataParameter[] commandParameters)
S>>

IT>Как раз второй параметр позволяет задавать отдельные параметры.
S>>В реализации этого метода, перед вызовом "SomeSproc" производить mapping intValue и guidValue.
IT>Это работает. Имена параметров будут @intValue и @guidValue, либо можно задать их специальным атрибутом.

Я видимо не совсем точно выразился. Хочется иметь преобразование значения, а не просто отожесвление guidValue с параметром под именем "@guidValue". Oracle не работает с Guid'ами, поэтому Guid'ы предварительно хочется сконверить в byte[] или допустим в string и потом уже только создать IDbDataParameter. Ведь в случае с MemberMapper'ом, происходит не только связывание member'а с соответсвующим параметром, но и возможно некое преборазование самого значения. Вот как раз хочется иметь возможность управлять этим преборазованием.
Re[3]: MemberMapper. Чего дополнительно хочется.
От: IT Россия linq2db.com
Дата: 25.01.06 02:40
Оценка:
Здравствуйте, Sashko, Вы писали:

S>Я видимо не совсем точно выразился. Хочется иметь преобразование значения, а не просто отожесвление guidValue с параметром под именем "@guidValue". Oracle не работает с Guid'ами, поэтому Guid'ы предварительно хочется сконверить в byte[] или допустим в string и потом уже только создать IDbDataParameter. Ведь в случае с MemberMapper'ом, происходит не только связывание member'а с соответсвующим параметром, но и возможно некое преборазование самого значения. Вот как раз хочется иметь возможность управлять этим преборазованием.


Понятно. MemberMapper тут не подойдёт, т.к. ему для преобразования нужен объект. Для отдельных значений пока никаких преобразований не предусмотрено кроме ValueToEnum, EnumToValue. Надо будет над этим подумать.
... << RSDN@Home 1.2.0 alpha rev. 0>>
Если нам не помогут, то мы тоже никого не пощадим.
Re[4]: MemberMapper. Чего дополнительно хочется.
От: Sashko Россия http://www.dc.baika.ru/
Дата: 25.01.06 03:00
Оценка:
Здравствуйте, IT, Вы писали:

IT>Понятно. MemberMapper тут не подойдёт, т.к. ему для преобразования нужен объект. Для отдельных значений пока никаких преобразований не предусмотрено кроме ValueToEnum, EnumToValue. Надо будет над этим подумать.


Я думал над этим, теоретически можно тот же MemberMapper адаптировать. То есть, нужно по сути дела сделать MemberAccessor'а который получает объект и его же возвращает, а не какой-то из его мемберов. Покопаюсь ещё в BLT, может предложу какой-нибудь вариант.
Re[5]: MemberMapper. Чего дополнительно хочется.
От: IT Россия linq2db.com
Дата: 25.01.06 03:30
Оценка:
Здравствуйте, Sashko, Вы писали:

S>Я думал над этим, теоретически можно тот же MemberMapper адаптировать. То есть, нужно по сути дела сделать MemberAccessor'а который получает объект и его же возвращает, а не какой-то из его мемберов. Покопаюсь ещё в BLT, может предложу какой-нибудь вариант.


Думаю лучше сделать какой-нибудь ValueMapper
... << RSDN@Home 1.2.0 alpha rev. 0>>
Если нам не помогут, то мы тоже никого не пощадим.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.