LINQtoSQL: Модификация в соответствии с требованиями код, генерируемый конструктором - Сценарий 1 – Небольшие изменения
ОГЛАВЛЕНИЕ
Сценарий 1 – Небольшие изменения
В этом случае мы, скорее всего, просто хотим вызывать генератор кода по умолчанию LINQtoSQL, захватить получившийся код как строку, управлять ей так, как нам нужно, и затем отправить измененный код обратно в Visual Studio.
Файл DBML, расположенный в папке Сценарий1 в бизнес-проекте, связан с классом CustomizeDesigners\Scenario1\CustSmallChangesToDefaultLINQtoSQL. Код, выполняющий требуемые изменения, довольно простой:
public class SmallChangesToDefaultLINQtoSQL : Generators.CodeRenderer
{
/// <summary>
/// Устанавливаемое по умолчанию средство изменения в соответствии с требованиями //пользователя для файлов dbml.
/// </summary>
public const string CustomToolName = "MSLinqToSQLGenerator";
public override Generators.RenderResults Render()
{
// запустить установленное по умолчанию средство изменения.
byte[] resultsAsBytes = base.RunOtherCustomTool(CustomToolName);
// получить сгенерированный Microsoft код как строку.
string results = System.Text.Encoding.Default.GetString(resultsAsBytes);
// преобразовать строку.
string modifiedResults = AddSomething(results); // AddAttribute(results) //добавить атрибут;
// вернуть строку и сохранить ее в файле .Designer.cs.
return new Generators.RenderResults(modifiedResults);
}
private string AddSomething(string results)
{
results = string.Format(@"// -------------------------------------------------------
// Automatically generated.
// Generation date: {0}
// Generated by: {1}
// -------------------------------------------------------
{2}",
System.DateTime.Now.ToString("yyyy-MM-dd hh:mm"),
System.Security.Principal.WindowsIdentity.GetCurrent().Name,
results);
return results;
}
}
Как можно видеть в вышеприведенном коде, мы вызываем стандартный генератор кода, чтобы извлечь код, сгенерированный проектировщиком Microsoft. Вы можете изменять этот код, добавляя к нему дополнительный код или заменяя определенные фрагменты кода с помощью процедур работы со строками или с помощью регулярных выражений.
Для проверки отредактируйте файл Business\Scenario1\CustomersLINQ.dbml в проекте Бизнес, сохраните его, раскройте список его потомков и откройте файл Business\Scenario1\CustomersLINQ.Designer.cs. Можно увидеть, что файл содержит дополнительный код, добавленный к коду Microsoft.
Для отладки установите точку останова в методе Render, запустите сеанс отладки, загрузите то же самое решение во второй экземпляр Visual Studio и выполните такие же действия, как и при тестировании примера.
Пример генератора кода имеет другой метод, AddAttribute, который показывает, как выполнять немного более сложные действия. Вы можете использовать регулярные выражения, если требуемые изменения более сложные.