• Microsoft .NET
  • LINQ
  • Часто задаваемые вопросы о LINQ - часть первая

LINQtoSQL: Модификация в соответствии с требованиями код, генерируемый конструктором

ОГЛАВЛЕНИЕ

Введение

LINQ to SQL используется для работы с данными на сервере баз данных SQL. Visual Studio поставляется с проектировщиком LINQtoSQL, который является мощным инструментом для генерирования LINQ. Он быстрый, простой в использовании, и имеет много других положительных сторон.

Хотя есть и недостаток. Вы не можете изменить сгенерированный код. Как и все другие проектировщики, он работает, в нем легко запустить демонстрационную программу, но когда вы оказываетесь в реальных жизненных ситуациях, вы всегда хотите немного большего. Это большее всегда связано с какой-то проблемой. Поэтому мы не будем пытаться создать лучший код LINQ to SQL. Мы просто покажем вам, как изменить и обогатить сгенерированный код за считанные минуты. Изменение в соответствии с требованиями пользователя полностью прозрачно для стандартного проектировщика LINQtoSQL, и вы по-прежнему сможете использовать его для моделирования классов и доступа к данным.

Краткие пояснения

Можно разбить задачу на три сценария, зависящие от того, насколько отличается желаемый сгенерированный код от того, который генерирует LINQtoSQL. Каждый сценарий будет подробно обсуждаться ниже, и будет реализован на основе бесплатного средства Visual Studio, называемого Reegenerator.

С помощью этого средства вы определяете в решении отдельный проект, который содержит сгенерированный код, не являющийся частью текущего варианта программы. Затем вы присоединяете элементы проекта LINQtoSQL (.dbml) к классам сгенерированного кода, определенным в этом проекте. Когда вы используете проектировщик LINQtoSQL и сохраняете файл, генерация кода будет вызвана автоматически, чтобы создать .Designer.cs, который зависим от файла DBML.

Использование кода

Загрузите файл архива по адресу. Вам понадобятся установленные Visual Studio 2008 и Reegenerator. Извлеките файлы из архива и загрузите файл решения в Visual Studio. Решение содержит проект, названный CustomizeDesigners, который содержит генераторы кода, и проект под названием Business, содержащий файлы DBML и базу данных, которая используется в качестве источника для проектировщика LINQtoSQL. В обоих проектах Business и RenderersLibrary  есть три папки Scenario (сценарий), которые содержат DBML и генераторы кода для каждого сценария, как описано ниже.

Чтобы запустить генерацию кода, вам нужно отредактировать и сохранить файл DBML, или щелкнуть на нем правой кнопкой мыши и вызвать "Запуск клиентского инструментария" ("Run Custom Tool"). Для отладки нужно задать точку останова в коде генератора кода в проекте RenderersLibrary и запустить сеанс отладки. Сеанс вызовет второй экземпляр Visual Studio. Загрузите то же самое решение во второй экземпляр и запустите генерацию кода, сохранив файл DBML. Сгенерированный код будет сохранен как элемент проекта (обычно ".Designer.cs"), зависимый от файла DBML. Необходимо щелкнуть мышкой на значке с изображением плюса, расположенном с левой стороны элемента проекта DBML, чтобы раскрыть список его потомков.

Чтобы проверить, к чему присоединен элемент проекта DBML, щелкните на нем правой кнопкой мыши и нажмите на "Attach Renderers (присоединенные рендереры)...".

Рисунок ниже показывает, как будет выглядеть ваша рабочая среда: