【问题标题】:Detecting a table's primary key检测表的主键
【发布时间】:2012-01-23 18:48:48
【问题描述】:

我正在尝试生成一些自定义实体和自定义方法来从数据库中获取数据。

ListByPrimaryKey - 列名有时是“ID”、“pid”、“id”等。

如何使用 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 编写扩展方法?

【问题讨论】:

  • 您使用的是哪个ORM?看this 回复NHibernate
  • 你有没有想过只运行一个数据库查询..?

标签: c# reflection t4


【解决方案1】:

如果您使用的是 SQL SERVER,请尝试运行任一查询

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')

【讨论】:

    猜你喜欢
    • 2012-06-24
    • 1970-01-01
    • 2019-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多