Принудительно включить в скаффолдер EF6 директивы «using» внутри пространства имен

#c# #.net #entity-framework #entity-framework-6

#c# #.net #entity-framework #entity-framework-6

Вопрос:

При создании класса контекста базы данных и классов сущностей POCO с использованием команды Scaffold-DbContext (первый подход DB) классы генерируются следующим образом:

     using System;
    using System.Collections.Generic;

    namespace Database
    {
        public partial class User
        {
            public User()
            { ... }
        }
    }
 

Чего я хочу добиться, так это чтобы классы POCO создавались с директивами «using» внутри пространства имен, например:

     namespace Database
    {
        using System;
        using System.Collections.Generic;

        public partial class User
        {
            public User()
            { ... }
        }
    }
 

Возможно ли это достичь без изменения шаблонов EF T4?

Ответ №1:

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

Этого можно достичь с помощью шаблона T4. Запускайте этот шаблон при сборке каждый раз, чтобы убедиться, что все POCO изменены.

Пример для одной модели:

 <#@ import namespace="System.IO" #>
<#@ template debug="false" hostspecific="true" language="C#" #>
<# 
string path = this.Host.ResolvePath(@"PocoClass.cs");
var PocoLines= File.ReadLines(path).ToArray();

List<string> usingStatements = new List<string>();

foreach (var line in pocoLines)
{
    if(Regex.Match(line, "RegexForUsings") //or use String.Contains("using");
        usingStatements.Add(line);
}
//insert lines again in PocoLines
#>