Sql Server Data Tools に対してコード生成ツールを作成していますが、次のデータ型を取得できる必要があります。
- 列を表示
- テーブルの計算列
この情報はどこにありますか? テーブル (計算列を除く) の場合は、次の場所にあります。
TSqlObject table; //retrieved elsewhere
TSqlObject column = table.GetReferenced(Table.Columns).First(); //first column
TSqlObject dataType = column.GetReferenced(Column.DataType).FirstOrDefault();
計算列の場合、dataType
上記は null です。
ビューについては、次のことを試しました。
TSqlObject view; //retrieved elsewhere
TSqlObject column = view.GetReferenced(View.Columns).First(); //first column
TSqlObject dataType = column.GetReferenced(Column.DataType).FirstOrDefault();//null
この情報はどこにありますか?ソース .DACPAC をデータベースに公開する以外に、この情報を取得するためのオプションはありますか?
EDIT:以下のEd Elliotへの対応(強く型付けされたDacFxモデルの使用に関して)
次のコードは、ビューの型情報を戻すことができません:
TSqlTypedModel model = new TSqlTypedModel(@"path.dacpac");
var view = model.GetObjects<TSqlView>(Microsoft.SqlServer.Dac.Model.DacQueryScopes.UserDefined).FirstOrDefault();
var viewcolumns = view.Columns;
//false
bool viewHasTypeInformation = viewcolumns.Any(c => c.DataType.Count() > 0);
var table = model.GetObjects<TSqlTable>(Microsoft.SqlServer.Dac.Model.DacQueryScopes.UserDefined).FirstOrDefault();
var tablecolumns = table.Columns;
//true
bool tableHasTypeInformation = tablecolumns.Any(c => c.DataType.Count() > 0);
これは DAC モデル自体の制限であると考え始めています。