Здравствуйте, Светлояр, Вы писали:
С>Рекомендую ознакомиться с очень простой ORM CoolStorage.NET.
В 90х любой настоящий программер должен был написать свою оконную систему и программу для бухучёта. А сейчас видимо каждый настоящий программер должен написать свой ORM .
Здравствуйте, Igor Trofimov, Вы писали:
С>>Пох. Главное, что она своё дело делает и очень удобна в тех местах, где не удобен XPO. iT>Позиция, пожалуй, правильная А можно подробнее об этих местах?
В БД появляются дополнительные таблицы (как минимум две) для хранения информациии о используемых Persistent-объектах. И почти перед каждым селектом XPO трахает базу запросами о запрашиваемых типах, да ещё и join'ит их с другими таблицами;
Оверхед из XPO'шных библиотек достаточно большой для небольших приложений или сайтов (для v7.2 => 1,5 мб), CoolStorage весит около 150 кб (но, имхо, даже этого функционала вполне достаточно, чтобы написать большинство приложений, которым дозволено работать с ORM);
Реализация отношения 1:1 в CoolStorage несколько удобнее, чем в XPO (кому интересно, http://www.devexpress.com/Help/Content.aspx?help=XPO&document=CustomDocument2055.htm );
XPO — вещь платная
С>>В БД появляются дополнительные таблицы (как минимум две) для хранения информациии о используемых Persistent-объектах. И почти перед каждым селектом XPO трахает базу запросами о запрашиваемых типах, да ещё и join'ит их с другими таблицами; С>>Оверхед из XPO'шных библиотек достаточно большой для небольших приложений или сайтов (для v7.2 => 1,5 мб), CoolStorage весит около 150 кб (но, имхо, даже этого функционала вполне достаточно, чтобы написать большинство приложений, которым дозволено работать с ORM); С>>Реализация отношения 1:1 в CoolStorage несколько удобнее, чем в XPO (кому интересно, http://www.devexpress.com/Help/Content.aspx?help=XPO&document=CustomDocument2055.htm ); С>>XPO — вещь платная С>>
iT>Остальное оценить сложнее, но первое уже говорит о том, что XPO — это "два", если конечно дело обстоит так, как ты говоришь. iT>Я что-то был о них лучшего мнения.
iT>Тут тебе правильно советуют посмотреть на NHibernate — все-таки это современная классика ORM.
От себя добавлю про XPO, так как поработал некоторое время:
— нет поддержки хранимок и возможности выполнения сложных запросов (для этого приходилось вытаскивать сначала ID объектов простым DataReader — ом, потом лишь делать select через язык запросов XPO, по вытащенным ранее идентификаторам)
— нет версионности, даже простейшей как в DataRow — т.е. узнать, какой объект — New, Unchanged, Modified — это у них идет в разрез с их unit of work -ами и откатами. Я для этих целей писал базовый класс, в котором перехватывал событие изменения объекта и выставлял вручную состояние (о UOW пришлось забыть)
-1 : 1 (уже писали выше) вообще лажа, в БД для этого должна быть ссылка (FK) в 2-х таблицах друг на друга. Реализовал через private коллекцию с одним элементом
— нет возможности делать case insensitive запросы, т.е. везде в запросах XPO ставит имена колонок в кавычках, а ставить Persistent атрибут каждому полю и класу, то еще удовольствие Для изменения этого поведения нужно писать наследника их провайдера
— XPO не закрывает отчего-то соединение, после выполнения select запроса. Это приводило к тому, что при работе с Oracle вываливалась ошибка, если долго не делать никаких запросов к БД, а потом запросить данные
— нет возможности сделать Undo/Redo. Я так понял для этих целей у них механизм UOW, но это этогда получится одна большая транзакция на сеанс работы
— Persistent классы не ходят через веб-сервисы, т.е. не сериализуются, что в общем-то логично, так как каждый объект должен быть привязан к сессии. Через remoting вроде работает
— INotifyPropertyChanged прикрутили в последней версии
— Кастомные классы не отнаследованные от XPOBaseObject не сериализуются в БД, я так и не смог заставить сохраняться свои классы — летели непонятные исключения о NonSession конструкторе или что-то вроде того (хотя делал как и написано в документации, правда давно с этим возился, может уже пофиксили )
— ну и много чего еще по мелочи
Такое ощущение, что писали XPO для внутренних нужд, а потом решили выложить как коммерческий продукт, а для этого нужен существенный рефакторинг. Суппорт у них, как написали в форуме .NET GUI работает иногда по принципу — моя твоя непонимай.
Существенный плюс — XPO отлично ладит с контролами от DXpress, что в общем-то понятно.
В общем работать можно, но после 1,2 проектов с небольшим запасом велосипедов
Рекомендую ознакомиться с очень простой ORM CoolStorage.NET.
Supports SQL Server 2000/2005, MySQL, IBM DB2, SQLite, MS Access
Any existing relational data model can be mapped to CoolStorage objects with minimal effort
All relation types are supported: One-To-One, One-To-Many, Many-To-One and Many-To-Many
Completely typed object model (no type casts required)
Full support for transactions, including .NET 2.0 TransactionScope
Nullable columns can be mapped to .NET 2.0 nullable fields or any other value
Delayed (lazy) loading of data to minimize database access
Powerful and intuitive database-independent object query language
Flexible event framework to intercept any event
Identity (auto-increment) keys are supported for all database types
Support for server and client generated Guid keys
Sessionless data access
Objects can be mapped to different databases, even across object relations
Pageable object collections
Extensive support for retrieving aggregate values on collections (count, sum, average, ...)
Collections implement IBindingList so they can be used by controls (grids) as a data source
Underlying database engine uses optimized and parameterized SQL queries. SQL injection is impossible
Built specifically for .NET 2.0, taking full advantage of generics and nullable variables
Raw SQL and/or stored procedures can be called on the underlying database without the need for a separate database connection
Small footprint (less than 150 KB)
Использую у себя на сайте — жутко понравилась В профессиональной деятельности использую XPO от Devexpress, должен сказать, что CoolStorage.NET ей неплохой конкурент (да и халявный).
Здравствуйте, Igor Trofimov, Вы писали:
iT>Позиция, пожалуй, правильная А можно подробнее об этих местах?
Пуф... можно я их вспомню и покажу? Буквально пару деньков. Сейчас с другим проектом вожусь.
С>В БД появляются дополнительные таблицы (как минимум две) для хранения информациии о используемых Persistent-объектах. И почти перед каждым селектом XPO трахает базу запросами о запрашиваемых типах, да ещё и join'ит их с другими таблицами; С>Оверхед из XPO'шных библиотек достаточно большой для небольших приложений или сайтов (для v7.2 => 1,5 мб), CoolStorage весит около 150 кб (но, имхо, даже этого функционала вполне достаточно, чтобы написать большинство приложений, которым дозволено работать с ORM); С>Реализация отношения 1:1 в CoolStorage несколько удобнее, чем в XPO (кому интересно, http://www.devexpress.com/Help/Content.aspx?help=XPO&document=CustomDocument2055.htm ); С>XPO — вещь платная С>
Остальное оценить сложнее, но первое уже говорит о том, что XPO — это "два", если конечно дело обстоит так, как ты говоришь.
Я что-то был о них лучшего мнения.
Тут тебе правильно советуют посмотреть на NHibernate — все-таки это современная классика ORM.
Здравствуйте, Светлояр, Вы писали:
С>В БД появляются дополнительные таблицы (как минимум две) для хранения информациии о используемых Persistent-объектах. И почти перед каждым селектом XPO трахает базу запросами о запрашиваемых типах, да ещё и join'ит их с другими таблицами;
Во первых таблица всего одна, необхдимая для загрузки типов которые не подняты в текущем домене, А структура бд, при нормальном дизайне прилаги, запрашивается либо один либо ноль раз (читайте мануалы).
С>Оверхед из XPO'шных библиотек достаточно большой для небольших приложений или сайтов (для v7.2 => 1,5 мб), CoolStorage весит около 150 кб (но, имхо, даже этого функционала вполне достаточно, чтобы написать большинство приложений, которым дозволено работать с ORM);
Здравствуйте, FixBo, Вы писали:
FB>Во первых таблица всего одна, необхдимая для загрузки типов которые не подняты в текущем домене, А структура бд, при нормальном дизайне прилаги, запрашивается либо один либо ноль раз (читайте мануалы).
Ок, разберёмся.
FB>По моим подсчетам 1.2 метра, а если начать количество фич ставнивать то CoolStorage явно не в плюсе.
Да, только вопрос в надобности этих фич.
С>>XPO — вещь платная FB>Здесь уж не поспоришь, но наличие суппорта...
Имхо, для тех проектов где ORM можно использовать он не так уж и часто необходим.
Здравствуйте, Aviator, Вы писали:
A>В 90х любой настоящий программер должен был написать свою оконную систему и программу для бухучёта. А сейчас видимо каждый настоящий программер должен написать свой ORM .
Зря смеётесь. Из всего, что перелопатил остановился на работе только с двумя XPO и CoolStorage.