SqlQuery:如何捕获sp_columns的结果?

时间:2018-03-26 17:25:24

标签: sql-server entity-framework

我需要获取表的结构,在Microsoft SQL Server Management Studio中创建数据库,我发现获取结构需要命令

exec sp_columns TableName

专注于site创建了一些代码:

public class ResultSchema
{
    public object TABLE_QUALIFIER { get; set; }
    public object TABLE_OWNER { get; set; }
    public object TABLE_NAME { get; set; }
    public object COLUMN_NAME { get; set; }
    public object DATA_TYPE { get; set; }
    public object TYPE_NAME { get; set; }
    public object PRECISION { get; set; }
    public object LENGTH { get; set; }
    public object SCALE { get; set; }
    public object RADIX { get; set; }
    public object NULLABLE { get; set; }
    public object REMARKS { get; set; }
    public object COLUMN_DEF { get; set; }
    public object SQL_DATA_TYPE { get; set; }
    public object SQL_DATETIME_SUB { get; set; }
    public object CHAR_OCTET_LENGTH { get; set; }
    public object ORDINAL_POSITION { get; set; }
    public object IS_NULLABLE { get; set; }
    public object SS_DATA_TYPE { get; set; }
}

SampleContext context = new SampleContext(@"Server=.\SQLEXPRESS;Database=ExampleDB1;Trusted_Connection=true");

var structure = context.Database.SqlQuery<ResultSchema>("EXEC sp_columns Tovars").ToList();

但结果是,我只得到空值,我做错了什么?如何获得表结构?

1 个答案:

答案 0 :(得分:1)

EF无法实现object,它始终需要特定的数据类型。换句话说,ResultSchema属性的数据类型应该与存储过程返回的列匹配:

public class ResultSchema
{
    public string TABLE_QUALIFIER { get; set; }
    public string TABLE_OWNER { get; set; }
    public string TABLE_NAME { get; set; }
    public string COLUMN_NAME { get; set; }
    public Int16 DATA_TYPE { get; set; }
    public string TYPE_NAME { get; set; }
    public int PRECISION { get; set; }
    public int LENGTH { get; set; }
    public Int16? SCALE { get; set; }
    public Int16? RADIX { get; set; }
    public Int16 NULLABLE { get; set; }
    public string REMARKS { get; set; }
    public string COLUMN_DEF { get; set; }
    public Int16 SQL_DATA_TYPE { get; set; }
    public Int16? SQL_DATETIME_SUB { get; set; }
    public int? CHAR_OCTET_LENGTH { get; set; }
    public int ORDINAL_POSITION { get; set; }
    public string IS_NULLABLE { get; set; }
    public byte? SS_DATA_TYPE { get; set; }
}