Сопоставление DateTimeOffset с TIMESTAMP WITH TIME ZONE в Oracle и NHibernate

Я не могу заставить NHibernate успешно сопоставить собственный тип оракула «TIMESTAMP WITH TIME ZONE» с типом CLR DateTimeOffset.

Похоже, что Oracle решила полностью игнорировать собственный тип DateTimeOffset и использует свой собственный проприетарный тип (OracleTimeStampTZ) в своем поставщике ADO.NET. Поскольку NHibernate использует собственные типы CLR (например, тип DateTimeOffset), поставщику Oracle ADO.NET не удается вставить строку с таким типом.

Есть ли у кого-нибудь из вас идеи, как можно решить эту проблему? Я должен использовать тип DateTimeOffset, так как мне нужно записать смещение часового пояса/летнего времени в дополнение к значению UTC. К сожалению, стандартное отображение DateTime мне не подходит.

заранее спасибо

Лирон


person Liron Levi    schedule 27.02.2012    source источник
comment
вы можете реализовать IUserType   -  person Firo    schedule 28.02.2012
comment
Наконец-то мне удалось сделать это без использования специального типа пользователя. Вместо этого я реализовал собственную реализацию класса IEntityPersister, которая обрабатывала преобразования. Я опубликую полную реализацию, как только закончу ее тестирование. Спасибо, в любом случае.   -  person Liron Levi    schedule 29.02.2012
comment
uff ... IMO IEntityPersistor гораздо сложнее реализовать, чем IUserType, спасибо за это   -  person Firo    schedule 29.02.2012
comment
После просмотра примера на martinwilley.com/net/code/nhibernate/usertype.html Я склонен согласиться с тем, что реализовать IUserType гораздо проще. Я попробую это, когда у меня будет время. Спасибо за ваш комментарий.   -  person Liron Levi    schedule 01.03.2012
comment
Не могли бы вы составить ответ, объясняющий, как вы его решили?   -  person quetzalcoatl    schedule 24.10.2017
comment
Я согласен с тем, что говорит Кетцалькоатла!! (красиво), пожалуйста, добавьте свое решение в качестве ответа.   -  person granadaCoder    schedule 01.08.2020
comment
Для будущих читателей, я получил это для (вроде) работы: (с Fluent (мой пользовательский подкласс) FluentNHibernate.Mapping.ClassMap) Map(x => x.MyDateUtc).Not.Nullable().CustomType‹UtcDateTimeType› (); ... где MyDateUtc является свойством C# poco: public virtual DateTimeOffset MyDateUtc { get; набор; } ... Я взял свой код отсюда: stackoverflow.com/questions/29352719/ с оракулом он стал TIMESTAMP (7)... так что это может привести к потере информации. просто делюсь тем, что нашел..   -  person granadaCoder    schedule 01.08.2020