OrmLite - 关于从现有表生成POCO的几个问题

时间:2014-07-09 21:12:26

标签: c# sql sql-server ormlite ormlite-servicestack

我需要使用数据库优先方法在新的Visual Studio C#控制台应用程序中使用OrmLite for SQL Server。我对POCO生成过程有一些疑问。

  • 如何排除某些模式转换为POCO?例如,我想完全忽略“dbo”架构。

  • 我的数据库中有两个名为“Tracking”的表,位于不同的模式中。当我像这样排除.tt文件中的表时:

    表[“跟踪”] .Ignore = true;

    运行.tt文件时出现错误,该文件表明exclude语句与多个表匹配。如何排除这些表?

  • 我想对表名和列名使用别名。 This page shows how to do that.从这个例子中,.tt文件将无法提供我需要的别名,因为别名是基于单个表和列给出的。我是否需要将.tt文件生成的POCO复制到项目中其他位置的单个文件中,然后为这些POCO提供我需要的别名?别名如何使用数据库优先方法在OrmLite中工作?

1 个答案:

答案 0 :(得分:1)

回答前两个问题 - 如果查看.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"内的条款会变得很难看。