2010-06-09 4 views
1

Содержит ли приятельские классы только данные для данных или для любого атрибута? Я пытаюсь прикрепить ColumnAttribute к полю в моем классе друзей, но, похоже, он не обрабатывается в исходном классе. Эти два класса связаны через MetadataType.Действительно ли Buddy Classes работают только для DataAnnotations?

ответ

0

Мой ответ не специфицирован DataAnnotations, это глобальный ответ того, как связать дескрипторы типов.

Создайте подкласс TypeDescriptionProvider, который описывает отношение классов (вы можете пропустить эту часть в некоторых случаях, когда u может использовать существующий дескриптор, такой как AssociatedMetadataTypeTypeDescriptionProvider).

Затем используйте TypeDescriptor.AddProvider или TypeDescriptor.AddProviderTransparent, чтобы динамически прикрепить их во время выполнения.

Мое предложение имеет сервис, который имеет список помеченных типов, и запускает все типы через него (по требованию, поэтому затраты на производительность распространяются на время выполнения приложения), а когда обрабатывается тип, добавьте тип в список, и в следующий раз, когда этот тип запрашивает, вы знаете, что он находится в списке.

0

Техника класса приятелей не является чем-то особенным для DataAnnotations. Однако он работает только в том случае, если код отражения, который вы используете, делает что-то с атрибутом MetadataType. Таким образом, ASP.NET MVC является примером кодовой базы, которая обрабатывает концепцию класса друзей, в то время как Linq-to-sql этого не делает. Итак, на данный момент вы застряли, если хотите использовать классы друзей, чтобы добавить ColumnAttribute. Однако, если вам действительно нужно получить фантазию, Linq-to-SQL возьмет XML-документ с сопоставлениями вместо использования атрибутов. Вы можете использовать это для построения своих сопоставлений в качестве альтернативы для экземпляров, в которых вы могли бы использовать класс buddy.

Если вам нужно действительно по-настоящему задуматься, сделайте свой собеседник, а затем создайте собственный обработчик отражения для вашего класса, соответствующий вашему классу атрибутов Linq, и создайте документы для сопоставления XML из того, что для ваших потребностей в DataContext , Возможно, вы можете сделать это менее чем в 50 строках кода.