Попробовав BLT захотелось следующих возможностей связанных с Mapping'ом значений из программы в базу и обратно.
1. Хочется иметь возможность для типа задавать свой mapper'ер по умолчанию. Сейчас поиск mapper'ов по умолчанию происходит в MemberMapper.CreateMemberMapper(MapMemberInfo mi). Не совсем понятно, зачем например, если я пишу под Oracle, искать среди mapper'ов для MS'ых Sql типов. Может поиск mapper'ов по умолчанию для специфичных типов вынести в IDataProvider. В общем хочется какой-то механизм позволяющий подпихивать свой MemberMapper который выбирался бы по умолчанию.
2. Map'ить не только member'ы бизнес объектов но и простые параметры. То есть на ряду с
иметь возможность создавать IDbDataParameter с object'а, предварительно выполнив его mapping. Добавить эту возможность в DataAccessor. То есть, допустим определён абстрактный метод
public abstract class TPTAccessor : DataAccessor<TopologyPropertyType>
{
public abstract int SomeSproc(int intValue, Guid guidValue);
// ...
}
В реализации этого метода, перед вызовом "SomeSproc" производить mapping intValue и guidValue.
Еще заметил странность что DataAccessor<T>.Insert(...) Возвращет void хотя внутри это исполнется как ExcuteScalar, что вполне логично, так что этого тоже не хватает (прим: у себя я это пофиксел, при этом кода Custom Accessor'ов стало намного меньше)
Здравствуйте, Sashko, Вы писали:
S>1. Хочется иметь возможность для типа задавать свой mapper'ер по умолчанию. Сейчас поиск mapper'ов по умолчанию происходит в MemberMapper.CreateMemberMapper(MapMemberInfo mi). Не совсем понятно, зачем например, если я пишу под Oracle, искать среди mapper'ов для MS'ых Sql типов. Может поиск mapper'ов по умолчанию для специфичных типов вынести в IDataProvider. В общем хочется какой-то механизм позволяющий подпихивать свой MemberMapper который выбирался бы по умолчанию.
Подумаем. Я сейчас переношу с RFD поддержку xml-схем и пытаюсь её немножко расширить. Такой вариант с MemberMapper там можно будет предусмотреть.
S>2. Map'ить не только member'ы бизнес объектов но и простые параметры. То есть на ряду с
Как раз второй параметр позволяет задавать отдельные параметры.
S>В реализации этого метода, перед вызовом "SomeSproc" производить mapping intValue и guidValue.
Это работает. Имена параметров будут @intValue и @guidValue, либо можно задать их специальным атрибутом.
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте, apetrov, Вы писали:
A>Еще заметил странность что DataAccessor<T>.Insert(...) Возвращет void хотя внутри это исполнется как ExcuteScalar, что вполне логично, так что этого тоже не хватает (прим: у себя я это пофиксел, при этом кода Custom Accessor'ов стало намного меньше)
Точно ExecuteScalar?
... << RSDN@Home 1.2.0 alpha rev. 0>>
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте, IT, Вы писали:
S>>2. Map'ить не только member'ы бизнес объектов но и простые параметры. То есть на ряду с IT>Это всё есть и работает. S>>
IT>Как раз второй параметр позволяет задавать отдельные параметры. S>>В реализации этого метода, перед вызовом "SomeSproc" производить mapping intValue и guidValue. IT>Это работает. Имена параметров будут @intValue и @guidValue, либо можно задать их специальным атрибутом.
Я видимо не совсем точно выразился. Хочется иметь преобразование значения, а не просто отожесвление guidValue с параметром под именем "@guidValue". Oracle не работает с Guid'ами, поэтому Guid'ы предварительно хочется сконверить в byte[] или допустим в string и потом уже только создать IDbDataParameter. Ведь в случае с MemberMapper'ом, происходит не только связывание member'а с соответсвующим параметром, но и возможно некое преборазование самого значения. Вот как раз хочется иметь возможность управлять этим преборазованием.
Здравствуйте, Sashko, Вы писали:
S>Я видимо не совсем точно выразился. Хочется иметь преобразование значения, а не просто отожесвление guidValue с параметром под именем "@guidValue". Oracle не работает с Guid'ами, поэтому Guid'ы предварительно хочется сконверить в byte[] или допустим в string и потом уже только создать IDbDataParameter. Ведь в случае с MemberMapper'ом, происходит не только связывание member'а с соответсвующим параметром, но и возможно некое преборазование самого значения. Вот как раз хочется иметь возможность управлять этим преборазованием.
Понятно. MemberMapper тут не подойдёт, т.к. ему для преобразования нужен объект. Для отдельных значений пока никаких преобразований не предусмотрено кроме ValueToEnum, EnumToValue. Надо будет над этим подумать.
... << RSDN@Home 1.2.0 alpha rev. 0>>
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте, IT, Вы писали:
IT>Понятно. MemberMapper тут не подойдёт, т.к. ему для преобразования нужен объект. Для отдельных значений пока никаких преобразований не предусмотрено кроме ValueToEnum, EnumToValue. Надо будет над этим подумать.
Я думал над этим, теоретически можно тот же MemberMapper адаптировать. То есть, нужно по сути дела сделать MemberAccessor'а который получает объект и его же возвращает, а не какой-то из его мемберов. Покопаюсь ещё в BLT, может предложу какой-нибудь вариант.
Здравствуйте, Sashko, Вы писали:
S>Я думал над этим, теоретически можно тот же MemberMapper адаптировать. То есть, нужно по сути дела сделать MemberAccessor'а который получает объект и его же возвращает, а не какой-то из его мемберов. Покопаюсь ещё в BLT, может предложу какой-нибудь вариант.
Думаю лучше сделать какой-нибудь ValueMapper
... << RSDN@Home 1.2.0 alpha rev. 0>>
Если нам не помогут, то мы тоже никого не пощадим.