【问题标题】:How can I get the SSDT Extended Property values of a table object via DacFx如何通过 DacFx 获取表对象的 SSDT 扩展属性值
【发布时间】:2017-04-27 04:36:26
【问题描述】:

我想检索我的 SSDT 表和列的扩展属性的值,以便我可以将它用于我正在使用 T4 处理的一些模型生成内容。

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

这些是您可以使用以下内容添加的扩展属性:

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 文档有点……缺乏。

【问题讨论】:

    标签: t4 sql-server-data-tools dac


    【解决方案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);
    

    扩展这个方法链混乱以循环对象的所有扩展属性留给读者练习......

    【讨论】:

    • 这个。是。惊人的。非常感谢!!
    • 作为阅读本文的任何人的后续行动,我有以下信息:foreach (var table in allTables) { var tableextended = table.GetReferencing() .Where(x =&gt; x.ObjectType.Name == "ExtendedProperty") .FirstOrDefault()? .GetProperty(ExtendedProperty.Value); if(tableextended) //do some stuff here } 并确认它正在工作并正确提取属性字段。
    猜你喜欢
    • 2013-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-04
    • 1970-01-01
    • 1970-01-01
    • 2021-10-18
    相关资源
    最近更新 更多