2010-11-02 4 views
1

Я пытаюсь построить сетку, используя информацию о классе и ее свойствах наряду с поддерживаемыми атрибутами dataannotion.Как получить атрибуты аннотации данных из свойств

Класс и аннотации могут быть определены в разных классах, таких как классы Product и ProductMetaData, и привязаны togather с атрибутом metadatatype (также могут быть определены в одном классе).

Будет ли атрибуты DataAnnotaion доступны в базовом классе или есть другие способы получения атрибутов dataannotation?

Любой образец кода, который вы можете указать, также будет очень полезен.

спасибо.

ответ

2

Чтобы прочитать метаданные модели из класса, вы должны, как правило, создать экземпляр DataAnnotationsModelMetadataProvider (в System.ComponentModel).

Этот класс генерирует объект ModelMetadata, который представляет собой сводку метаданных класса.

Одним из основных преимуществ этого подхода является то, что он автоматически учитывает метаданные в классах метаданных приятелей.

Используя ModelMetadata, вы также представляете прекрасную абстракцию между конкретными атрибутами метаданных и интерпретацией их значения. Например, если вы создаете некоторые из ваших собственных атрибутов метаданных или хотите использовать другие источники метаданных (например, относитесь ко всем свойствам, заканчивающимся в Date, как если бы они применяли DataType.Date, даже если они этого не делают), вы можете создать свои собственные DataAnnotationsModelMetadataProvider, добавьте эти дополнительные правила, и весь ваш другой код работает без изменений, потому что он читает из класса ModelMetadata - не непосредственно из знания конкретных атрибутов.

+0

Джеймс, любой намек на то, как его использовать? На самом деле я передаю анионный тип, используя IQueryable , type является подзапросом/проекцией из аннотированного класса, будет ли этот анонный тип переносить метаданные? – hazimdikenli

+0

Хорошо, метаданные не переносятся на анонимный тип. – hazimdikenli

+0

К сожалению, нет. Если вам нужно проецировать другой тип, вам придется объявить этот тип и добавить к нему метаданные. Интересная проблема - возможно, есть несколько возможностей для улучшения кода проецирования LINQ. –

Смежные вопросы