воскресенье, 10 июля 2011 г.

Маппинг в Entity Framework с помощью Fluent API

Как известно, в Entity Framework действует ряд соглашений для Code First. Изменить их можно с помощью аннотации данных (Data Annotations) или через интерфейс Fluent API. Их можно использовать совместно. В конечном счете, информация о маппинге собирается в порядке Fluent API, Аннотации данных, а затем - соглашения. В последнее время все большую популярность набирает удобный и понятный интерфейс Fluent. С помощью него посмотрим, каким образом можно кастомизировать маппинг.

четверг, 7 июля 2011 г.

Создание пользовательских разделов конфигурации (ConfigurationSection). Часть 2: Унификация и управление конфигурацией

В прошлой части я показал, как можно создавать обработчики собственных секций файла конфигурации (app.config или web.config) и вызывать их из кода. Во второй части осталось рассмотреть еще несколько интересных моментов, которые могут пригодиться при работе с конфигурацией.

вторник, 5 июля 2011 г.

Создание пользовательских разделов конфигурации (ConfigurationSection). Часть 1

В .NET Framework есть очень удобный механизм хранения настроек приложения. Как показывает практика, многие разработчики либо не понимают, как использовать потенциал этого механизма, либо вообще не знают, что в файле конфигурации можно хранить что-то большее, чем строку соединения с базой данных (в секции connectionStrings), ну или, в лучшем случае, пар ключ-значение (в секции appSettings). А механизм заключается в декларативном написании классов, которые описывают необходимые настройки.

пятница, 1 июля 2011 г.

FastReport.Net: число прописью на русском

Иногда в разрабатываемых приложениях стоит задача представить данные на печатной форме или отчете. Особенно часто эта задача возникает в приложениях бухгалтерской направленности, где существуют формы строгой отчетности. Для решения таких задач используют генераторы отчетов: FastReport.Net, Crystal Reports и другие.

Кто хоть раз имел дело с бухгалтерией, наверняка знает, что на некоторых формах требуется выводить суммы или числа прописью в специально отведенных для этого полях. На самом деле, это далеко не тривиальная проблема.

В компании, где я работаю, используется FastReport.Net, поэтому именно на его примере посмотрим, как можно добиться нужного результата.

четверг, 28 апреля 2011 г.

Создание пустой базы данных по шаблону

Некоторое время назад (уже уж более полугода) я устроился на работу в отличную фирму в группу разработки мобильных решений на платформе MS Windows CE и библиотеки .NET Compact Framework (.NET CF) в среде Visual Studio 2008. Первое время я занимался поддержкой существующих приложений либо разрабатывал настольные приложения различного назначения.

Мобильные решения часто в составе имеют также базу данных SQL Server Compact (SQL Server CE) в виде единого файла *.sdf, который хранится либо во внутренней памяти мобильного устройства (и, соответственно, удаляется при горячей перезагрузке), либо на флеш-карте, если такая есть в устройстве (так как флеш-память энергонезависима, файл базы данных остается после любой перезагрузки). В связи с этим возникает задача создания пустой базы данных по шаблону, в которой приложение может складировать данные. Такая может быть заполнена по умолчанию какими-либо данными (например, можно хранить номер версии базы для поддержания ее в актульном состоянии). У меня была возможность сравнить два решения этой задачи, которыми я готов поделиться.

среда, 16 марта 2011 г.

Пару слов об OnPaint в .NET

При рисовании нестандартных элементов управления или изображений обычно используют один из двух подходов: перекрывают метод OnPaint или перехватывают событие Paint.

protected override void OnPaint(PaintEventArgs e)
{
    // тут что-то происходит....
}

или

private void Form_Paint(object sender, PaintEventArgs e)
{
    // тут что-то происходит....
}

Недавно столкнулся с проблемой, что перекрытый метод OnPaint не вызывается, а обработка события Paint не происходит. Поиск в яндексе дал пару похожих проблем, которые несколько лет остаются без решения либо решены окольными путями.