[英]Adding attributes to Entity Framework models nested classes properties
我一直在寻找一种将属性添加到实体类属性的方法,而我发现达到此目的的唯一方法就像本示例一样, 在Entity Framework代码中添加自定义属性
因此,我将其应用于我的项目,看起来应该可以正常工作,但是当我尝试通过属性反映属性时,我得到的是空值。 我已经检查了我的代码多次,只是不知道为什么会发生。
我的代码示例:在实体基础模型中:
public partial class Trainer
{
public Trainer()
{
this.Subjects = new HashSet<Subject>();
}
public int ID { get; set; }
public int PersonalDataID { get; set; }
public virtual PersonalData PersonalData { get; set; }
public virtual ICollection<Subject> Subjects { get; set; }
}
在我的部分课程中:
[MetadataType(typeof(Trainer.TrainerMetadata))]
public partial class Trainer
{
internal class TrainerMetadata
{
[Search("PersonalData", true)]
public virtual PersonalData PersonalData { get; set; }
[Search("Subject", true)]
public virtual ICollection<Subject> Subjects { get; set; }
}
}
我用于反射的代码:
foreach (PropertyInfo pI in typeof(Trainer).GetProperties())
{
//sAttr always == null
SearchAttribute sAttr = pI.GetCustomAttributes(typeof(SearchAttribute))
.FirstOrDefault() as SearchAttribute;
}
任何帮助将不胜感激。
您的SearchAttribute()
不会应用于Trainer
类,而是应用于TrainerMetadata
类,因此您的foreach将永远找不到它们。
您需要执行以下操作:
var metadata = typeof(Trainer).GetCustomAttributes(typeof(MetaDataAttribute))
.FirstOrDefault();
if (metadata != null)
{
var trainerMetadata = metadata.MetadataClassType;
foreach (PropertyInfo pI in trainerMetadata.GetProperties())
{
var sAttr = pI.GetCustomAttributes(typeof(SearchAttribute))
.FirstOrDefault() as SearchAttribute;
}
}
虽然...我不确定为什么未生成的部分不会看起来像:
public partial class Trainer
{
[Search("PersonalData", true)]
public virtual PersonalData PersonalData { get; set; }
[Search("Subject", true)]
public virtual ICollection<Subject> Subjects { get; set; }
}
属性的属性在编译时会合并。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.