gpt4 book ai didi

c# - 如何在 Entity Framework (EF6)中获取sql表的扩展属性?

转载 作者:行者123 更新时间:2023-11-30 17:45:38 25 4
gpt4 key购买 nike

我在 VS-2013 中工作。我添加了 ADO.NET 实体数据模型,其中包含:

  1. 来自数据库的 EF Designer,
  2. 首先从数据库编码

连接到我数据库中的一些表,它生成了带有部分类的 tt 文件,并在表的每个字段上添加了注释如下:

ms_item_cat.cs

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 中检索我的扩展属性:

  1. 通过 Nuget Tiraggo 库 ( Install-Package Tiraggo.Edmx ) 添加。它可以访问 edmx 文件中一些有用的元数据。
  2. 将下面列出的引用和 namespace 添加到您的 *.tt 文件中(其中一些对于您的目的来说可能是多余的,但我需要所有这些)。我已将它们添加到
    <#@ include file="EF6.Utility.CS.ttinclude"#>
    ojit_代码

    <#@ 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" #>
  3. 然后使用适当的连接字符串创建一个数据库上下文实例(您可以在附近的某个地方使用 <#@ output extension=".cs"#>typeMapperef 等实例化)

    code

  4. 使用 Tiraggo 库创建 edmx 对象的实例。 (edmxLocation 是 var dbContext = new DbContext(yourConnectionString) 文件的路径字符串)

    edmx

  5. 在*.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();
    }#>

因此,此方法将按名称从表的列中检索扩展属性。

  1. Edmx edmx = Edmx.Load(edmxLocation); 循环中创建一个信息对象以获取具体实体的元数据

    foreach

  2. 通过调用静态方法检索扩展属性值:

    string extendedPropertyValue = GetExtendedProperty(dbContext, entityInfo.StorageInfo.Schema, entityInfo.StorageInfo.Name, edmProperty.Name, extendedPropName);
  3. 这是我的完整 template 。我已经删除了一些代码,模板可能处于无法编译的状态,但是您可以在那里看到代码的用法。

附言希望,它会有所帮助。抱歉格式不正确

关于c# - 如何在 Entity Framework (EF6)中获取sql表的扩展属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27265439/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com