仅在linq2db中使用T4Model在选定表中生成POCO类

时间:2019-03-12 08:18:39

标签: t4 poco linq2db

我正在使用linq2db作为带有SQL Server数据库的Web应用程序项目(ASP.NET Core 2.2)的ORM。

该数据库包含500多个表,并且只有一部分表与Web应用程序相关。因此,我只想使用T4Model生成来映射相关表。 有没有一种方法可以只为指定的表生成POCO类?

我目前的方法:为所有表生成POCO类,然后删除不需要的类。

1 个答案:

答案 0 :(得分:1)

查看文档https://github.com/linq2db/linq2db/tree/master/Source/LinqToDB.Templates#example-of-generation-process-customization的这一部分

您需要将此代码添加到T4模板中,以通过Tables字典并删除所有不需要的表,包括与此类表的关联以及可以返回它们的过程。例如

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

不幸的是,它仍然可能会产生一些剩菜,但是您可以用类似的方法将它们过滤掉。