2017-04-27 26 views
1

我想检索我的SSDT表和列的扩展属性的值,以便我可以将它用于某些模型生成的东西我正在工作在使用T4。我如何通过DacFx获取表格对象的SSDT扩展属性值

我在网上找不到任何这样做的例子,有没有其他人做过这个?

这些是扩展属性,你可以用下面的添加:

GO 
EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = 
N'somepropertytext', @level0type = N'SCHEMA', @level0name = N'dbo', 
@level1type = N'TABLE', @level1name = N'table_name', @level2type = 
N'COLUMN', @level2name = N'column_name'; 
在我的T4模板

在那里我上样的信息,我有这样的:

var property = column.GetProperty<string>(???); 

我不是肯定会发生什么?部分来获得这个扩展的属性信息。有任何想法吗?

我能够获得关于像空,精度列的其他属性,在此等

MS文档是有点...欠缺。

回答

1

扩展属性不是列的属性,它是相反的方式,即列是扩展属性引用的内容!

var propertyName = column.GetReferencing() 
    .Where(x=> x.ObjectType.Name == "ExtendedProperty").First() 
    .Name.ToString(); 

var propertyValue = column.GetReferencing() 
    .Where(x=> x.ObjectType.Name == "ExtendedProperty").First() 
    .GetProperty(ExtendedProperty.Value); 

扩展这一方法链式混乱遍历对象的所有扩展属性就留给读者做练习...

+0

此。是。真棒。非常感谢你!! – CBerg

+0

正如后续的人在阅读本,我有以下: '的foreach(在allTables变种表) { 变种tableextended = table.GetReferencing() 。凡(X => x.ObjectType.Name == “ExtendedProperty”) .FirstOrDefault()? .GProProperty(ExtendedProperty.Value); if(tableextended) //在这里做一些东西 } ' 并确认它正在工作并正确拉取属性字段。 – CBerg