2013-10-16 1 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 인스턴스를 만듭니다 var에 foo는 = 새로운 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");