2013-09-03 3 views
2

SMO를 사용하여 POCO 개체에 대한 T4 템플릿을 만들어 SQL Server에서 개체 세부 정보를 가져 왔습니다. 지금은 탐색 속성의 데이터 유형을 결정하는 방법을 결정하려고합니다. 내 주요 문제는 T 또는 List<T>이어야하는지 확인하는 방법입니다.T4 POCO. 외래 키 관계 (<T> 또는 T?)

SQL 대신 EF 또는 Linq를 사용하지 않습니다.

정확하게 데이터 유형을 결정하기 위해 내가 점검해야 할 사항이 있습니까?

+0

일반적으로 관련 테이블의 열에 인덱스가 있는지 확인합니다. 인덱스가 고유성을 적용하면 T? 다른 시간에는 명명 규칙이 있지만 분명히 프로젝트에 의존하고 있습니다. – FuleSnabel

답변

0

내가 찾고있는 것은 외래 키의 카디널리티를 결정하는 방법입니다. 하지만 기본 키 열의 고유성을 검사하여 수행 할 수 있다고 생각하지만 속성에 대한 이름을 자동 생성하는 것뿐만 아니라이 문제에 대해 걱정할 필요없이 탐색 속성을 직접 코딩하는 옵션을 선택했습니다. .

1

사용중인 SQL 버전에 따라 INFORMATION_SCHEMA를 사용하여 POCO를 빌드하는 데 필요한 모든 것을 얻을 수 있습니다. 다음은 http://searchcode.com/codesearch/view/15361587입니다. 열이 외래 키인지 여부를 비롯한 많은 특성과 함께 모든 테이블과 열을 나열합니다.

SELECT 
--TBL.TABLE_SCHEMA, 
TBL.TABLE_TYPE, 
COL.TABLE_NAME, 
COL.ORDINAL_POSITION, 
COL.COLUMN_NAME, 
COL.DATA_TYPE, 
COL.IS_NULLABLE, 
ISNULL(COL.CHARACTER_MAXIMUM_LENGTH,-1) AS MAXIMUM_LENGTH, 
--COL.TABLE_CATALOG, 
(CASE KEYUSG.CONSTRAINT_TYPE WHEN 'PRIMARY KEY' THEN 'YES' ELSE 'NO' END) PRIMARY_KEY, 
(CASE KEYUSG.CONSTRAINT_TYPE WHEN 'FOREIGN KEY' THEN 'YES' ELSE 'NO' END) FOREIGN_KEY, 
FK.FOREIGN_TALBE, 
FK.FOREIGN_COLUMN, 
KEYUSG.CONSTRAINT_NAME 
FROM 
INFORMATION_SCHEMA.COLUMNS COL 
JOIN 
INFORMATION_SCHEMA.TABLES TBL 
ON 
COL.TABLE_NAME=TBL.TABLE_NAME 

    LEFT JOIN 
    (
    SELECT 
    USG.CONSTRAINT_NAME, 
    USG.TABLE_NAME, 
    USG.COLUMN_NAME, 
    CONST.CONSTRAINT_TYPE 
    FROM 
    INFORMATION_SCHEMA.KEY_COLUMN_USAGE USG 
    JOIN 
    INFORMATION_SCHEMA.TABLE_CONSTRAINTS CONST 
    ON 
    USG.TABLE_NAME=CONST.TABLE_NAME 
    AND 
    USG.CONSTRAINT_NAME = CONST.CONSTRAINT_NAME 
    ) 
    AS KEYUSG 
ON 
COL.TABLE_NAME=KEYUSG.TABLE_NAME 
AND 
COL.COLUMN_NAME=KEYUSG.COLUMN_NAME 

---FOREIGHTKEYS 
    LEFT OUTER JOIN 
    (
    SELECT 
    USAGE.TABLE_NAME, 
    USAGE.COLUMN_NAME, 
    UNI_USAGE.TABLE_NAME FOREIGN_TALBE, 
    UNI_USAGE.COLUMN_NAME FOREIGN_COLUMN, 
    CONST.CONSTRAINT_NAME, 
    UNIQUE_CONSTRAINT_NAME 
    FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS CONST 
    JOIN 
    INFORMATION_SCHEMA.KEY_COLUMN_USAGE USAGE 
    ON 
    USAGE.CONSTRAINT_NAME=CONST.CONSTRAINT_NAME 
    JOIN 
    INFORMATION_SCHEMA.KEY_COLUMN_USAGE UNI_USAGE 
    ON 
    UNI_USAGE.CONSTRAINT_NAME=CONST.UNIQUE_CONSTRAINT_NAME 
    ) 
    AS FK 
ON 
FK.TABLE_NAME=COL.TABLE_NAME 
AND 
FK.COLUMN_NAME = COL.COLUMN_NAME 
AND 
KEYUSG.CONSTRAINT_NAME=FK.CONSTRAINT_NAME