微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

获取实体列的名称

如何解决获取实体列的名称

我正在创建一个使用 asp.net core 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));

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。