使用EF metadatatype模型类,postharp属性拦截不起作用

时间:2015-10-23 21:05:59

标签: c# entity-framework annotations postsharp metadatatype

我使用PostSharp写了一个LocationInterceptionAspect。当调用EF模型的类的setter或getter时,它应该在EF6的MVC5应用程序中运行。 将注释添加到自动生成的模型类时,会正确调用该方面。由于这不是一个有效的选项,我试图将注释添加到相应的metadatatype类。

这有效:

public partial class Company
{
  [Encrypt]      
  public string name{ get; set; }
}

这不起作用:

[MetadataType(typeof(CompanyMetadata))]
public partial class Company
{

}
internal sealed class CompanyMetadata
{
    [Encrypt]       // does not work
    [Requiered]     // works 
    public string name{ get; set; }
}

如果我添加其他注释作为[Requiered]注释,将执行此注释的功能。 我试图将[加密]注释放在其他地方 - 它始终有效。只有在metadatatype类中,我才会遇到没有调用方面的问题。

有人有想法吗? 谢谢你的帮助!

1 个答案:

答案 0 :(得分:0)

实体框架使用[MetadataType]中指定的类型作为元数据源。元数据类型中的属性逻辑无关紧要。

由于PostSharp更改了这些属性的实现,因此您不会发现任何行为上的差异。

您需要做的是直接在生成的类Company的属性上应用方面。由于您无法访问源代码(它已生成),因此您需要"多播"您需要的所有属性的方面。

最简单的方法是执行以下操作:

[Encrypt(AttributeTargetMembers = "name", 
         AttributeTargetElements = MulticastTargets.Property)]
public partial class Table
{
}

这告诉PostSharp将位置级方面应用于名为" name"的属性。在目标类上。由于该类存在于程序集中,因此将正确更改。