我使用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类中,我才会遇到没有调用方面的问题。
有人有想法吗? 谢谢你的帮助!
答案 0 :(得分:0)
实体框架使用[MetadataType]
中指定的类型作为元数据源。元数据类型中的属性逻辑无关紧要。
由于PostSharp更改了这些属性的实现,因此您不会发现任何行为上的差异。
您需要做的是直接在生成的类Company
的属性上应用方面。由于您无法访问源代码(它已生成),因此您需要"多播"您需要的所有属性的方面。
最简单的方法是执行以下操作:
[Encrypt(AttributeTargetMembers = "name",
AttributeTargetElements = MulticastTargets.Property)]
public partial class Table
{
}
这告诉PostSharp将位置级方面应用于名为" name"的属性。在目标类上。由于该类存在于程序集中,因此将正确更改。