2013-10-16 43 views
2

我試圖從兩個不同的目錄加入兩個表,但我無法去工作。LLBLGen - 如何使用CatalogNameOverwriteHashtable

我知道我必須做一些與CatalogNameOVerwriteHashtable,但顯然我做錯了什麼。

文檔鏈接(http://www.llblgen.com/documentation/2.6/using%20the%20generated%20code/Adapter/gencode_dataaccessadapter_adapter.htm)沒有提供足夠的信息來解決我的挑戰。

我有以下情況:

  • 我有兩個目錄:CatalogA和CatalogB
  • 有文章 - 表CatalogA和CatalogB

我一個StockCount表我創建了一個手動關係。到現在爲止還挺好。

我的猜測是,我有下列行爲:

  • 創建一個新的CatalogNameOverwriteHashtable實例: 變種富=新CatalogNameOverwriteHashtable();
  • foo.Add(「StockCount」,「CatalogA」);
  • foo.Add(「Article」,「CatalogB」);
  • 將其分配給適配器:adapter.CatalogNameOverwrites = foo;

導致下面的查詢:

SELECT 
[dbo].[StockCount].[ArticleId], 
[dbo].[Article].[Description], 
[dbo].[StockCount].[ShopId], 
[dbo].[StockCount].[LastMutationDateTime] 
FROM ([dbo].[StockCount] INNER JOIN 
[dbo].[Article] ON [dbo].[StockCount].[ArticleId]=[dbo].[Article].[ArticleId]) 

顯然,我做錯了什麼,因爲目錄名稱在查詢失蹤。問題是,什麼?

+0

我剛剛解決了我的問題。使用CatalogNameOverwriteHashtable類並分配給CatalogNameOverwrites屬性。在此HashTable中,將生產目錄名稱分配給開發目錄名稱。 –

回答

1

最終,解決方案非常簡單,並證明了LLBLGen功能強大且易於使用的原因。

首先。當您生成實體時,目錄名稱將存儲在FieldInfoProviders中。這可以通過以下指令檢索:

var catalogName = ORMapper.Utils.DatabasePersistenceInfo.GetFieldPersistenceInfo(ArticleFields.PKey).SourceCatalogName; 

此目錄名稱是您用來生成實體的目錄。這可能是您的開發數據庫。

您要做的下一件事是將開發目錄名稱與生產目錄名稱進行映射。像這樣:

adapter = new DataAccessAdapter("Your connection string"); 
adapter.CatalogNameOverwrites =new CatalogNameOverwriteHashtable(); 
adapter.CatalogNameOverwrites.Add(catalogName, "ProductionCatalogName");