[英]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.