вторник, 31 мая 2011 г.

Проблемы с Web-страницами

Ни раз натыкался на одни и те же грабли, выраженные совершенно по разному.
Признаки:
  • Тотально разваливается верстка
  • Не работают базовые вещи (не отображается заголовок, кнопки)
  • И многое другое
Надо обратить внимание на то, чтобы все теги были закрыты, все строки и кавычки соответствовали. Иногда из-за одного символа ложиться весь сайт. Следите за тем, что пишете.
VS2010 должна проводить валидацию и соответствующие ошибки отображаются как warning.

воскресенье, 29 мая 2011 г.

Используем Fluent NHibernate с Oracle

Авторы позиционируют свой продукт как:
"Fluent, XML-less, compile safe, automated,convention-based mappings for NHibernate."

То есть в нашем проекте не будет xml. Совсем.
Скачать можно здесь: http://fluentnhibernate.org/

В этом посте расскажу как поднял.
Я использовал NuGet в VS2010. Понадобится пакет Fluent NHibernate (в моем случае версия 1.2.0.712). NuGet автоматически выкачает все зависимости.

Я предполагаю, что у вас уже есть:
  1. Некоторая база в Oracle Server.
  2. Установленные на клиентском компьютере Oracle ODAC или Oracle Client.
  3. Необходимые протестированные строки подключения.
Возьмем любую сущность, например фотоальбом, принадлежащий пользователю User и содержащий в себе фотографии Images (свойство Thumbnail не рассматривается):

Обратите внимание на то что мы используем private setter для Id, а так же для коллекций, которые инициализируются в конструкторе. Помимо этого все свойства помечены виртуальными, это необходимо для NHibernate.

Рассмотрим код для маппинга нашей сущности:
MappingNames представляет из себя мой статический класс со строковыми константами имен таблиц и колонок, используемых в БД, ибо эти значения используются в нескольких проектах.

Класс отображения надо унаследовать от обобщенного класса ClassMap<>.
Метод Id() отображает идентификаторы, которые, в нашем случае, генерируются выбранным sequence; Map() отображает соответствующие свойства (используя соглашение об именах свойств для отображения на поля БД, так же можно задавать вручную с помощью метода Column(string)); Reference() идентичено NHibernate'овскому many-to-one, HasMany() — one-to-many, в соответствующих сущностях эти свойства должны быть прописаны с точностью до наоборот.

Более подробно о методах маппинга вы можете прочитать в вики Fluent NHibernate.

Пример конфигурирования БД:
Далее, метод OpenSession() используется в репозиториях или в Dependency Injection

Не забывайте так же со всеми бинарниками таскать и соответствующие провайдеры драйверов, в моем случае (Oracle ODAC) — библиотека Oracle.DataAccess.dll. Надо выставлять в свойствах ее Reference: Copy Local = True. Пишите тесты, чтобы видеть что вообще работает.

Вот так компонент помогает избавиться от xml и сделать всю конфигурацию строго типизированной.

Вопросы?

Желаю гибкого коннекта.

пятница, 27 мая 2011 г.

Опыт использования R# 6

Выкачал парочку Early Access Program билдов шестого по счету решарпера.
Установленный не на SSD Гагаринский (12.04) билд, несмотря на свой рейтинг "Stable", сильно подтормаживал.
Заявлена поддержка JavaScript, CSS и, конечно же, Razor view engine.
Сейчас использую билд от 26.05. Периодически пишет в свой лог исключения, предлагает отправить — по возможности участвую, сразу на сайте в трекере видно. В целом VS2010 еще ни разу не упала. Мелкие глюки и недоработки R# практически никак не влияют на общее положительное впечатление от использования в новых областях.