SMO를 사용하여 POCO 개체에 대한 T4 템플릿을 만들어 SQL Server에서 개체 세부 정보를 가져 왔습니다. 지금은 탐색 속성의 데이터 유형을 결정하는 방법을 결정하려고합니다. 내 주요 문제는 T
또는 List<T>
이어야하는지 확인하는 방법입니다.T4 POCO. 외래 키 관계 (<T> 또는 T?)
SQL 대신 EF 또는 Linq를 사용하지 않습니다.
정확하게 데이터 유형을 결정하기 위해 내가 점검해야 할 사항이 있습니까?
SMO를 사용하여 POCO 개체에 대한 T4 템플릿을 만들어 SQL Server에서 개체 세부 정보를 가져 왔습니다. 지금은 탐색 속성의 데이터 유형을 결정하는 방법을 결정하려고합니다. 내 주요 문제는 T
또는 List<T>
이어야하는지 확인하는 방법입니다.T4 POCO. 외래 키 관계 (<T> 또는 T?)
SQL 대신 EF 또는 Linq를 사용하지 않습니다.
정확하게 데이터 유형을 결정하기 위해 내가 점검해야 할 사항이 있습니까?
내가 찾고있는 것은 외래 키의 카디널리티를 결정하는 방법입니다. 하지만 기본 키 열의 고유성을 검사하여 수행 할 수 있다고 생각하지만 속성에 대한 이름을 자동 생성하는 것뿐만 아니라이 문제에 대해 걱정할 필요없이 탐색 속성을 직접 코딩하는 옵션을 선택했습니다. .
사용중인 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
일반적으로 관련 테이블의 열에 인덱스가 있는지 확인합니다. 인덱스가 고유성을 적용하면 T? 다른 시간에는 명명 규칙이 있지만 분명히 프로젝트에 의존하고 있습니다. – FuleSnabel