Генерация классов POCO с T4Model в linq2db только для выбранных таблиц - PullRequest
0 голосов
/ 12 марта 2019

Я использую linq2db в качестве ORM для своего проекта веб-приложения (ASP.NET Core 2.2) с базой данных SQL Server.

База данных состоит из более 500 таблиц, и только подмножество таблиц относится к веб-приложению. Поэтому я хотел бы отображать только соответствующие таблицы, используя генерацию T4Model. Есть ли способ создать класс POCO только для указанных таблиц?

Мой текущий подход: генерировать классы POCO для всех таблиц, а затем удалять ненужные.

1 Ответ

1 голос
/ 13 марта 2019

Проверьте эту часть документации https://github.com/linq2db/linq2db/tree/master/Source/LinqToDB.Templates#example-of-generation-process-customization

Вам необходимо добавить этот код в шаблон T4, чтобы просмотреть словарь таблиц и удалить все ненужные таблицы, включая ассоциации с такими таблицами и процедуры, которые могут их вернуть. Э.Г.

var allowedTables = new HashSet<string>() { "Patient", "Person"  };

// go though Tables and remove all tables you don't need
foreach (var kvp in Tables.ToList())
    if (!allowedTables.Contains(kvp.Value.TableName))
        Tables.Remove(kvp.Key); // remove table
    else
        // if table needed, check that it doesn't have associations to removed tables
        foreach (var keyKvp in kvp.Value.ForeignKeys.ToList())
            if (!allowedTables.Contains(keyKvp.Value.OtherTable.TableName))
                kvp.Value.ForeignKeys.Remove(keyKvp.Key); // remove association to table

// also remove all procedures that return filtered-out tables
foreach (var kvp in Procedures.ToList())
    if (kvp.Value.ResultTable != null && !allowedTables.Contains(kvp.Value.ResultTable.TableName))
        Tables.Remove(kvp.Key); // remove procedure

К сожалению, он все еще может генерировать некоторые остатки, но вы можете отфильтровать их аналогичным образом.

...