2016-05-20 5 views
1

POCOクラスからさまざまなプロパティの実際のDBデータ型を取得する方法はありますか?例については :のは、名前と説明をデータベース(SQL Serverなど)にVARCHAR(N)、またはテキストのようになりDBデータ型を取得するServiceStack Ormlite

public class Product : IHasId<int> 
{ 
    [Alias("id")] 
    [Required] 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public string Description { get; set; } 
} 

フィールドPOCOクラスを想定してみましょう。 POCOプロパティから実際のDBデータ型を取得することは可能ですか?

答えて

3

OrmLiteは、あなたが取得することができますのTypeConverterに指定されているものであることを基礎となるRDBMSスキーマの列定義を期待:あなたはSQL Serverのクエリを実行するためのカスタムSQLを使用する必要があるだろう実際の列定義を取得するには

var converter = OrmLiteConfig.DialectProvider.GetStringConverter(); 
var columnDef = converter.ColumnDefinition; 

var sql = @"select COLUMN_NAME, data_type + 
    case 
     when data_type like '%text' or data_type like 'image' or data_type like 'sql_variant' or data_type like 'xml' 
      then '' 
     when data_type = 'float' 
      then '(' + convert(varchar(10), isnull(numeric_precision, 18)) + ')' 
     when data_type = 'numeric' or data_type = 'decimal' 
      then '(' + convert(varchar(10), isnull(numeric_precision, 18)) + ',' + convert(varchar(10), isnull(numeric_scale, 0)) + ')' 
     when (data_type like '%char' or data_type like '%binary') and character_maximum_length = -1 
      then '(max)' 
     when character_maximum_length is not null 
      then '(' + convert(varchar(10), character_maximum_length) + ')' 
     else '' 
    end as COLUMN_DEFINITION 
FROM information_schema.columns"; 

using (var db = dbFactory.OpenDbConnection()) 
{ 
    var results = db.Dictionary<string,string>(sql + " WHERE table_name = 'Product'"); 

    var nameColumnDef = results["Name"]; //= varchar(8000) 

    //Or print out all column definitions for each field with: 
    results.PrintDump(); 
    /* 
    { 
     Id: int, 
     Name: varchar(8000) 
     ... 
    } 
    */ 
} 
関連する問題