I am creating a meta data class for a POCO object. I am adding the “CSVColumn” (from LINQToCSV) attribute to the meta data class. But when I run the program, it couldn’t find its attributes.
So I tested it using reflection,
Type t = typeof(Case);
PropertyInfo pi = t.GetProperty("ProviderId");
//bool isReadOnly = ReadOnlyAttribute.IsDefined(pi,typeof( ReadOnlyAttribute);
var attributes = pi.GetCustomAttributes(typeof(Case),true);
It acutally return nothing by calling the “GetCustomAttributes”.
What have I done wrong??
Below is the way I created metadata class.
One thing I don’t understand is, it works perfectly well with MVC validations. Wondering how does that retrieve the custom attributes???
This is the entityframework POCO object
public partial class Case
{
public string ProviderName { get; set; }
public string ProviderId { get; set; }
}
Here I create a partial class of Case and metadata classes,
[MetadataType(typeof(CaseMetaData))]
public partial class Case
{
public class CaseMetaData
{
[CsvColumn(Name = "ProviderName", FieldIndex = 1)]
public string ProviderName { get; set; }
[CsvColumn(Name = "ProviderID", FieldIndex = 2)]
public string ProviderId { get; set; }
}
}
Please someone can help me, much appreciated.
Cheers
typeof(Case)isn’t an attribute type.You mean
typeof(CsvColumnAttribute).Also, standard Reflection isn’t aware of metadata classes.
You need to use
AssociatedMetadataTypeTypeDescriptionProvider.A good example can be found here