我正在VS-2013中工作。我添加了ADO.NET Entity Data Model
,其中包含:
连接到数据库中的某些表,它生成了带有部分类的tt
文件,并在表的每个字段上添加了注释如下:
public partial class ms_item_cat
{
public ms_item_cat()
{
ms_items = new HashSet<ms_items>();
}
[Key]
public int pk_icat_id { get; set; }
[Required]
[StringLength(50)]
public string icat_name { get; set; }
[StringLength(50)]
public string icat_image_path { get; set; }
}
它没有显示我已添加到表中的某些扩展属性,例如说明等
下面的脚本将显示那些扩展属性:
select p.*, t.*
from sys.extended_properties p
inner join sys.tables t on p.major_id = t.object_id
where class = 1
我设法通过这种方式从Db中检索了扩展属性:
Install-Package Tiraggo.Edmx
)添加。它可以访问edmx文件中的一些有用的元数据。将下面列出的引用和名称空间添加到您的* .tt文件中(其中一些对于您而言可能是多余的,但是我需要所有这些)。我在之间添加了它们<#@ include file="EF6.Utility.CS.ttinclude"#>
和<#@ output extension=".cs"#>
<#@ assembly name="$(ProjectDir)TiraggoEdmx\TiraggoEdmx.EF.dll" #>
<#@ assembly name="System.Configuration" #>
<#@ import namespace="System.Data" #>
<#@ import namespace="System" #>
<#@ import namespace="System.Xml.Serialization" #>
<#@ import namespace="TiraggoEdmx_v3" #>
<#@ import namespace="System.Data.Entity" #>
<#@ import namespace="System.Configuration" #>
<#@ import namespace="System.Linq" #>
然后使用适当的连接字符串创建db上下文的实例(您可以在实例化typeMapper
,ef
,code
等位置的附近完成此操作)
var dbContext = new DbContext(yourConnectionString)
使用Tiraggo库创建edmx对象的实例。 (edmxLocation是edmx
文件的路径字符串)
Edmx edmx = Edmx.Load(edmxLocation);
将静态方法添加到* .tt文件的末尾
<#+ public static string GetExtendedProperty(DbContext context, string schema, string tableName, string columnName, string propName) {
var query = context.Database.SqlQuery<string>(string.Format("SELECT value FROM fn_listextendedproperty (NULL, 'schema', '{0}', 'table', '{1}', 'column', '{2}') where objname = '{2}' AND name = '{3}'", schema, tableName, columnName, propName));
return query.FirstOrDefault();
}#>
因此,此方法将按名称从表的列中检索扩展属性。
foreach
内部循环创建一个信息对象,以获取具体实体的元数据
var entityInfo = new TiraggoEntityInfo(edmx, entity.FullName);
通过调用静态方法检索扩展属性值:
string extendedPropertyValue = GetExtendedProperty(dbContext, entityInfo.StorageInfo.Schema, entityInfo.StorageInfo.Name, edmProperty.Name, extendedPropName);
这是我的完整template。我已经删除了一些代码,并且模板可能处于无法编译的状态,但是您可以在其中看到代码的用法。
P.S。希望会有所帮助。抱歉,格式化不正确