2014-07-09 49 views
0

我需要在使用數據庫優先方法的新Visual Studio C#控制檯應用程序中使用OrmLite for SQL Server。我有一些關於POCO生成過程的問題。OrmLite - 關於從現有表生成POCO的幾個問題

  • 如何排除某些模式轉換爲POCO?例如,我想完全忽略「dbo」模式。

  • 我有兩個表名爲「跟蹤」在我的數據庫中的不同架構。當我排除.tt文件中的表格時,如下所示:

    tables [「Tracking」]。Ignore = true;

    運行.tt文件時出現錯誤,該文件說明排除語句與多個表匹配。我如何排除這些表格?

  • 我想爲別名和列名使用別名。 This page shows how to do that.從這個例子中,.tt文件將無法給出我需要的別名,因爲別名是在單獨的表和列的基礎上給出的。我是否需要將.tt文件生成的POCO複製到項目中其他位置的單個文件中,然後向這些POCO提供我需要的別名? OrmLite中的別名如何以數據庫優先的方式工作?

回答

1

要回答你的第2個問題 - 如果你看看.tt文件的開頭,你可以看到代碼如何通過Table對象循環來創建POCO類。 在這條線,你可以看到循環的開始:

foreach(Table tbl in from t in tables where !t.Ignore select t) 

你可以看到,它不循環通過與t.Ignore屬性表設置爲「真」。你可以只添加到這裏是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(「from t in tables ...」)分解爲一個單獨的變量可能會更好,因此您可以使其儘可能地複雜,並保持代碼的可讀性。在「foreach」中添加一堆額外的「where」子句會變得很難看。