2016-04-11 22 views
1

Entity Framework kullanıyorum ve meta veriler bu tablolardan biri için nasıl görünüyor.Get Column Varlık adı

[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; } 

Ben Sütun kamu adına yerine "AddDate" nin pp_added yani ekran yerine nitelik adı almakla ilgileniyorum. Ben iade almak istiyorum ne

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 
geçerli: Burada defa neredeyse İşte

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"); 
} 

beni orada döndürülecek olan alır yazdığım bir foreach döngü

Genel Name yerine pp_added almak için [Column("pp_added")]'a nasıl erişirim?

+0

Yansıma kullanmanız gerekir. Daha fazla bilgi için http://stackoverflow.com/questions/9113020/get-attribute-info-with-generics – mit

+0

Yansıma tabanlı yaklaşım akıcı API durumunda çalışmayacaktır. EF meta verilerini keşfetmeniz gerekiyor. – Dennis

cevap

4

Bu çalışması gerekir:

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"); 
} 

ColumnAttributeSystem.ComponentModel.DataAnnotations.Schema ad içindedir.

+0

Ama "field.Name" beklenen değeri döndürmediğini söylüyor. –

+0

Alanın 'Name' özelliğini kullanmıyorum ama –

+0

sütun özniteliğine çok teşekkür ederim. Bu hile yaptı. Yardımın için çok minnettarım. –

1

İskender'in cevabı ek olarak, bu null türü için temel tipini alacak: o null ise

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

Nullable.GetUnderlyingType yatan Tipi geçer (örneğin o DateTime dönecektir, DateTime? verilirse), veya null değilse null döndürür. Bu nedenle, ?? ifade.

+0

Bulamadığım bir sonraki sorum olacaktı. Önümüzdeki cevap için teşekkürler ve bana 2 gün boyunca bakıp çalışıyorum. Bunu çok takdir ediyorum. –

İlgili konular