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”)中的值,如果找不到它,这将是我的下一个问题。谢谢你提前给出答案,省去了我两天的寻找和尝试。我非常感激。