簡體   English   中英

向實體框架模型的嵌套類屬性添加屬性

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM