Поиск…


Динамическое добавление интерфейсов к модели

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

В следующем примере будет показано, как автоматически добавлять интерфейсы для классов с именами конкретных столбцов:

В вашей модели перейдите в файл .tt чтобы модифицировать метод EntityClassOpening следующим образом: это добавит интерфейс IPolicyNumber для объектов с POLICY_NO и IUniqueId в UNIQUE_ID

public string EntityClassOpening(EntityType entity)
{
    var stringsToMatch = new Dictionary<string,string> { { "POLICY_NO", "IPolicyNumber" }, { "UNIQUE_ID", "IUniqueId" } };
    return string.Format(
        CultureInfo.InvariantCulture,
        "{0} {1}partial class {2}{3}{4}",
        Accessibility.ForType(entity),
        _code.SpaceAfter(_code.AbstractOption(entity)),
        _code.Escape(entity),
        _code.StringBefore(" : ", _typeMapper.GetTypeName(entity.BaseType)),
        stringsToMatch.Any(o => entity.Properties.Any(n => n.Name == o.Key)) ? " : " + string.Join(", ", stringsToMatch.Join(entity.Properties, l => l.Key, r => r.Name, (l,r) =>  l.Value)) : string.Empty);
}

Это один конкретный случай, но он показывает способность изменять шаблоны .tt .

Добавление XML-документации в классы объектов

На всех сгенерированных классах моделей по умолчанию отсутствуют комментарии к документации. Если вы хотите использовать комментарии документации XML для всех сгенерированных классов сущностей, найдите эту часть внутри [modelname] .tt (имя модели - текущее имя файла EDMX):

foreach (var entity in typeMapper.GetItemsToGenerate<EntityType>(itemCollection))
{
    fileManager.StartNewFile(entity.Name + ".cs");
    BeginNamespace(code); // used to write model namespace
#>
<#=codeStringGenerator.UsingDirectives(inHeader: false)#> 

Вы можете добавить комментарии к документации XML перед линией UsingDirectives как показано в примере ниже:

foreach (var entity in typeMapper.GetItemsToGenerate<EntityType>(itemCollection))
{
    fileManager.StartNewFile(entity.Name + ".cs");
    BeginNamespace(code);
#>
/// <summary>
/// <#=entity.Name#> model entity class.
/// </summary>
<#=codeStringGenerator.UsingDirectives(inHeader: false)#> 

Сгенерированный комментарий к документации должен содержать имя объекта, как указано ниже.

/// <summary>
/// Example model entity class.
/// </summary>
public partial class Example
{
    // model contents
}


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow