【问题标题】: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”子句会很快变得丑陋。

    【讨论】:

      猜你喜欢
      • 2012-11-18
      • 1970-01-01
      • 2011-01-19
      • 2011-04-09
      • 1970-01-01
      • 2011-06-24
      • 1970-01-01
      • 2011-05-12
      • 2011-08-24
      相关资源
      最近更新 更多