Buddy Classes只适用于DataAnnotations吗?

时间:2010-06-09 21:38:31

标签: c# data-annotations buddy-class columnattribute

伙伴类只适用于数据注释或任何属性吗?我一直在尝试将 ColumnAttribute 附加到我的好友类中的某个字段,但似乎它没有在原始类中处理。这两个类通过MetadataType链接。

2 个答案:

答案 0 :(得分:0)

我的答案不是特定于DataAnnotations,这是关于如何关联类型描述符的全球答案。

创建一个描述类关系的TypeDescriptionProvider子类(在某些情况下你可以跳过这部分,你可以使用现有的描述符,如AssociatedMetadataTypeTypeDescriptionProvider)。

然后使用TypeDescriptor.AddProviderTypeDescriptor.AddProviderTransparent动态附加运行时。

我的建议是拥有一个标记类型列表的服务,并通过它运行所有类型(按需,因此性能成本在应用程序运行时传播),并且在处理类型时,添加键入列表,下次此类型请求时,您知道它在列表中。

答案 1 :(得分:0)

伙伴类技术对DataAnnotations并不特别。但是,它仅在您使用的反射代码具有MetadataType属性的情况下才有效。因此,ASP.NET MVC是处理伙伴类概念的代码库的示例,而Linq-to-sql则不然。所以,如果你想使用好友类来添加ColumnAttribute,那么你就会被卡住。但是,如果你真的需要花哨,Linq-to-SQL将采用带有映射的XML文档而不是使用属性。您可以使用它来构建映射,作为您可能使用过伙伴类的实例的替代方法。

如果您需要真正,非常喜欢,请继续制作您的好友类,然后针对您的Linq属性修饰类编写自己的伙伴类感知反射处理程序,并根据您的DataContext需求构建XML映射文档。你可以用不到50行的代码来做到这一点。