1

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

4

2 回答 2

0

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

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

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

我的建议是有一个具有标记类型列表的服务,并通过它运行所有类型(按需,因此性能成本在应用程序运行时分摊),当处理一个类型时,将类型添加到列表,下次这种类型的请求,你知道它在列表中。

于 2010-08-13T04:15:46.957 回答
0

伙伴类技术对于 DataAnnotations 并没有什么特别之处。但是,它仅在您使用的反射代码对该MetadataType属性执行某些操作时才有效。因此,ASP.NET MVC 是处理伙伴类概念的代码库示例,而 Linq-to-sql 没有。所以,如果你想使用伙伴类来添加一个ColumnAttribute. 但是,如果您真的需要花哨,Linq-to-SQL 将使用带有映射而不是使用属性的 XML 文档。您可以使用它来构建您的映射,作为您可能使用过伙伴类的实例的替代方案。

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

于 2010-10-15T01:57:10.030 回答