繁体   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