C# 向实体框架模型嵌套类属性添加属性

C# 向实体框架模型嵌套类属性添加属性,c#,entity-framework,C#,Entity Framework,我一直在寻找一种将属性添加到entities类属性的方法,而我找到的唯一一种方法就是这个例子 所以我把它应用到我的项目中,它看起来应该可以很好地工作,但是当我试图通过属性属性进行反映时,我得到了空值。 我已经检查了我的代码多次,只是不知道为什么会发生这种情况 我的代码示例: 在实体基础模型中: public partial class Trainer { public Trainer() { this.Subjects = new HashSet<Subje

我一直在寻找一种将属性添加到entities类属性的方法,而我找到的唯一一种方法就是这个例子


所以我把它应用到我的项目中,它看起来应该可以很好地工作,但是当我试图通过属性属性进行反映时,我得到了空值。 我已经检查了我的代码多次,只是不知道为什么会发生这种情况

我的代码示例: 在实体基础模型中:

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; }
}
任何帮助都将不胜感激。

您的
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; }
}
公共部分课程培训师
{
[搜索(“个人数据”,真)]
公共虚拟PersonalData PersonalData{get;set;}
[搜索(“主题”,真实)]
公共虚拟ICollection主题{get;set;}
}

由于属性的属性在编译时被合并。

请发布您的代码。我已经编辑了我的帖子“试图通过属性属性反映,我得到空值”是的,现在确实编辑了,因为它是实体框架特定的。实体框架知道,如果您应用
MetaDataAttribute()
将其用于验证(可能有我在其中编写的验证字段的代码)。除非我弄错了,否则您的自定义
SearchAttribute()
与实体框架无关,因此您必须实际编写代码。
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; }
}