获取实体的列的名称

get the name of a column of an entity

我正在使用 asp.net 核心 3.1 和实体框架 6

创建一个网站

我想在代码 c# 中从我的数据库中获取实体列的名称。

[Table("CORPSDEMETIER")]
public partial class CorpsDeMetier : BaseClass
{
    
    [Column("CODE_CORPS_DE_METIER")]
    [StringLength(5)]
    public string CodeCorpsDeMetier { get; set; }

    [Column("LIBELLE_CORPS_DE_METIER")]
    [StringLength(50)]
    public string LibelleCorpsDeMetier { get; set; }

    public IList<EntrepriseCorpsdemetier> EntrepriseCorpsdemetiers { get; set; }
    public IList<ProjetEntrepriseCorpsDeMetier> ProjetEntreprisesCorpsDeMetier { get; set; }

}

我已经看到如何通过 SQL 查询得到它:

SELECT * FROM sys.columns WHERE object_id = OBJECT_ID( 'CORPSDEMETIER' ) 

但是当我认为我可以在代码中获取它时,我不想再询问数据库一次。

在这种情况下,我想得到“LIBELLE_CORPS_DE_METIER”

CorpsDeMetier item = new CorpsDeMetier();
string name = item.LibelleCorpsDeMetier. ......;

对不起,我的英语很糟糕,希望你能理解我。 谢谢你读我。

您可以使用反射并读取 ColumnAttribute 名称。

 public static class ObjExtenstions
 {
    public static string GetColumnName(this object obj, string name)
    {
        string result = name;

        var property = obj.GetType().GetProperties().FirstOrDefault(x => x.Name.Equals(name));
        if (property != null)
        {
            var columnAttribute = (ColumnAttribute)property.GetCustomAttributes(true).FirstOrDefault(x => x.GetType() == typeof(ColumnAttribute));
            result = columnAttribute?.Name;
        }

        return result;
    }
 }

用法(如果未使用 ColumnAttribute,则返回 属性 名称):

var name = item.GetColumnName(nameof(CorpsDeMetier.LibelleCorpsDeMetier));