Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 获取实体的列名_C#_Entity Framework_Columnattribute - Fatal编程技术网

C# 获取实体的列名

C# 获取实体的列名,c#,entity-framework,columnattribute,C#,Entity Framework,Columnattribute,我使用的是实体框架,下面是其中一个表的元数据 [Column("pp_account")] public string Account { get; set; } [Column("pp_added")] public DateTime? AddDate { get; set; } [Column("pp_auser")] public string AddUpdateUserName { get; set; } [Column("pp_c

我使用的是实体框架,下面是其中一个表的元数据

    [Column("pp_account")]
    public string Account { get; set; }
    [Column("pp_added")]
    public DateTime? AddDate { get; set; }
    [Column("pp_auser")]
    public string AddUpdateUserName { get; set; }
    [Column("pp_cfalt")]
    public string AlternateForwardingNumber { get; set; }
我感兴趣的是获取列属性名称而不是公共名称,即显示pp_added而不是“AddDate”。到目前为止,我已经编写了一个foreach循环,它几乎可以让我达到目的

foreach(var field in _personal.GetType().GetProperties())
{
            sb.Append("\nName            : " +  field.Name + "\n");
            sb.Append("Type        : " + field.PropertyType.Name + "\n");
            sb.Append("Attributes:  " + field.Attributes + "\n");
            sb.Append("Value       : " + field.GetValue(_personal, null) + "\n");
}
以下是返回的内容:

Name:  AddDate
Type:  Nullable'1
Attributes:  None
Value:  5/2/2014 12:00:00 AM
我想得到的回报是

Name:  pp_added
Type:  Date
Value:  5/2/2014 12:00:00 AM
如何访问
[列(“pp_added”)]
以获得
pp_added
而不是公共
名称

foreach(var field in _personal.GetType().GetProperties())
{
   sb.Append("\nName       : " +  field.GetCustomAttribute<ColumnAttribute>().Name + "\n");
   sb.Append("Type        : " + field.PropertyType.Name + "\n");
   sb.Append("Value       : " + field.GetValue(_personal, null) + "\n");
}
foreach(personal.GetType().GetProperties()中的变量字段)
{
sb.Append(“\n名称:“+field.GetCustomAttribute().Name+”\n”);
sb.追加(“类型:“+field.PropertyType.Name+”\n”);
sb.Append(“值:”+field.GetValue(_personal,null)+“\n”);
}

ColumnAttribute
位于
System.ComponentModel.DataAnnotations.Schema
命名空间中。

除了Alexander的答案之外,这将获得可空类型的基础类型:

sb.Append("Type        : " + (Nullable.GetUnderlyingType(field.PropertyType) ?? field.PropertyType).Name + "\n");

如果基础类型可为null,则返回该类型(即,如果给定了
DateTime?
,则返回
DateTime
),如果不可为null,则返回null。因此,
??
表达式。

需要使用反射。有关基于反射的方法在fluent API中不起作用的更多信息,请参阅。你需要探索EF元数据。但是他说“field.Name”并没有返回预期的值。我没有使用字段的
Name
属性,而是列attribute的属性。我非常感谢你。这就成功了。我非常感谢你的帮助。这对谁有用吗?对我来说,“field.GetValue(_personal,null)”总是返回C变量的名称,而不是列(“xxxx”)中的值,如果找不到它,这将是我的下一个问题。谢谢你提前给出答案,省去了我两天的寻找和尝试。我非常感激。