2012-01-23 7 views
1

Я пытаюсь создать некоторые пользовательские сущности и настраиваемый метод для получения данных из базы данных.Обнаружение первичного ключа таблицы

ListByPrimaryKey - имя столбца иногда «ID», «PID», «идентификатор» и т.д.

Как вы можете обнаружить, что столбец является первичным ключом с помощью C#, используя шаблоны T4?

protected void GenerateListByMethods(Table table) 
{ 
    WriteLine("#region ListBy\n"); 

    WriteLine("\n\tpublic List<"+Prefix+table.Name+"> ListAll()\n\t{\n\t " + 
     this.RepositoryNotification + 
     "\n\t\t\t return Ctx.GetAll().ToList().ToCustomList<"+table.Name+","+Prefix+table.Name+">();\n\t}\n"); 
    foreach (Column column in table.Columns) 
    { 
     switch(column.DataType.Name) 
     { // do something 

Как вы можете написать метод расширения для column.DataType.IsPrimaryKey?

+0

, который 'ORM' вы используете? Посмотрите на [this] (http://stackoverflow.com/a/8801227/601179) ответ для 'NHibernate' – gdoron

+1

Задумывались ли вы о запуске запроса базы данных ..? – MethodMan

ответ

2

Если вы используете SQL SERVER попытку запустить либо из querys

SELECT i.name AS IndexName, 
     OBJECT_NAME(ic.OBJECT_ID) AS TableName, 
     COL_NAME(ic.OBJECT_ID,ic.column_id) AS ColumnName 
FROM sys.indexes AS i INNER JOIN 
     sys.index_columns AS ic ON i.OBJECT_ID = ic.OBJECT_ID 
           AND i.index_id = ic.index_id 
WHERE i.is_primary_key = 1 

или

select * 
from sysobjects 
where xtype='pk' and 
    parent_obj in (select id from sysobjects where name='tablename')