仅针对选定表在 linq2db 中使用 T4Model 生成 POCO 类
Generating POCO classes with T4Model in linq2db for selected tables only
我使用 linq2db 作为我的 Web 应用程序项目 (ASP.NET Core 2.2) 和 SQL 服务器数据库的 ORM。
该数据库由 500 多个表组成,只有一部分表与 Web 应用程序相关。因此,我只想使用 T4Model 生成来映射相关表。
有没有办法只为指定的表生成 POCO class?
我目前的方法:为所有表生成 POCO classes,然后删除不需要的表。
您需要将此代码添加到您的 T4 模板以通过表字典并删除所有您不需要的表,包括与此类表的关联以及可能 return 它们的过程。例如
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
不幸的是,它仍然会产生一些残留物,但你可以用类似的方式过滤掉它们。
我使用 linq2db 作为我的 Web 应用程序项目 (ASP.NET Core 2.2) 和 SQL 服务器数据库的 ORM。
该数据库由 500 多个表组成,只有一部分表与 Web 应用程序相关。因此,我只想使用 T4Model 生成来映射相关表。 有没有办法只为指定的表生成 POCO class?
我目前的方法:为所有表生成 POCO classes,然后删除不需要的表。
您需要将此代码添加到您的 T4 模板以通过表字典并删除所有您不需要的表,包括与此类表的关联以及可能 return 它们的过程。例如
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
不幸的是,它仍然会产生一些残留物,但你可以用类似的方式过滤掉它们。