【问题标题】:Using reflection to get property attributes from a metadata class使用反射从元数据类中获取属性属性
【发布时间】:2011-10-12 14:54:05
【问题描述】:

我有一个名为 Project 的 LINQ 生成类。

我想为生成的属性添加一些属性,所以我定义了一个带有 MetadataType 属性的部分类。

[MetadataType(typeof(Project_HiddenProps))]
public partial class Project : IProject
{
    // There are also a few additional properties defined here.
}

public class Project_HiddenProps
{
    [HiddenColumn]
    public System.Guid Id { get; set; } 
    // Id is an auto-generated property that I've added a custom attribute to
}

后来我用反射来尝试获取这个属性的属性。

var customAttributes = prop.GetCustomAttributes(false);

不过,我只得到一个System.Data.Linq.Mapping.ColumnAttribute 类型的属性。我的 HiddenColumn 属性不包含在集合中。我的问题是如何使用反射来获取这些元数据属性。

任何帮助将不胜感激。

【问题讨论】:

标签: c# asp.net reflection .net-4.0 attributes


【解决方案1】:

您可以使用约定方法来反映其他类:

var type = Type.GetType(entityType.FullName + "_HiddenProps," + entityType.AssemblyQualifiedName);
type.GetProperty("Id").GetCustomAttributes(false);

好友类无法自动与核心组件合并。这仅用于内部框架元数据(假设这是 MVC,或者可能是动态数据?)

正如cmets中提到的@CyanLite,您可以使用元数据属性described here中的Meta类(Cyan添加的链接)。

【讨论】:

  • 它是动态数据,但带有网络表单。
  • 好的。不幸的是,结果仍然是一样的。
  • 尝试使用它,但出现“给定程序集名称或代码库无效。(来自 HRESULT 的异常:0x80131047)”的异常
  • 那我说的可能是错的:entityType.AssemblyQualifiedName,这里本质上定义了程序集的名称,所以它会生成一个类似:“type,assemblyname”的字符串,如:“MyNS.Project_HiddenProps ,MyAssembly”
  • 知道了 - 不是 entityType.AssemblyQualifiedName,而是 entityType.Assembly.FullName。感谢您的帮助!
猜你喜欢
  • 2018-06-05
  • 1970-01-01
  • 1970-01-01
  • 2017-06-10
  • 2013-01-16
  • 1970-01-01
  • 2017-11-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多