【问题标题】:OrmLite - A Few Questions About Generating POCOs From Existing TablesOrmLite - 关于从现有表生成 POCO 的几个问题
【发布时间】:2014-07-09 21:12:26
【问题描述】:
我需要使用数据库优先方法在新的 Visual Studio C# 控制台应用程序中使用 OrmLite for SQL Server。我对 POCO 生成过程有一些疑问。
如何排除某些模式被转换为 POCO?例如,我想完全忽略“dbo”模式。
-
我的数据库中有两个不同模式的名为“Tracking”的表。当我像这样排除 .tt 文件中的表时:
tables["Tracking"].Ignore = true;
运行 .tt 文件时出现错误,提示 exclude 语句匹配多个表。如何排除这些表?
我想为表名和列名使用别名。 This page shows how to do that. 在此示例中,.tt 文件将无法提供我需要的别名,因为别名是在单个表和列的基础上提供的。我是否需要将从 .tt 文件生成的 POCO 复制到项目中其他位置的单个文件中,然后为这些 POCO 提供我需要的别名?别名如何在 OrmLite 中以数据库优先的方式工作?
【问题讨论】:
标签:
c#
sql
sql-server
ormlite
ormlite-servicestack
【解决方案1】:
回答您的前 2 个问题 - 如果您查看 .tt 文件的开头,您可以看到代码如何循环通过 Table 对象来创建 POCO 类。
在这一行中,您可以看到循环的开始:
foreach(Table tbl in from t in tables where !t.Ignore select t)
您可以看到,当 t.Ignore 属性设置为“true”时,它不会循环遍历表。您可以添加到该 linq 语句的 where 子句以忽略整个架构,如下所示:
foreach(Table tbl in from t in tables where !t.Ignore && t.Schema != "dbo" select t)
现在您已经了解了该部分代码,您可以在 where 子句中添加所需的任何过滤,例如:
foreach(Table tbl in from t in tables where !t.Ignore && t.Schema != "dbo" && t.Name != "Tracking" select t)
这将忽略任何名为“Tracking”的表,无论其“Schema”属性值是什么。将 IEnumerable (“表中的 t ......”)分解为一个单独的变量可能会更好,这样您就可以根据需要使其复杂并保持代码可读性。在“foreach”中添加一堆额外的“where”子句会很快变得丑陋。