извлечь расширенные свойства SQL Server как часть EF 4.0 Entites или запустить хранимую процедуру в шаблоне T4, который - PullRequest
6 голосов
/ 03 марта 2011

Я смотрю, можно ли сделать расширенные свойства частью сущностей в EF 4.0, когда файл .edmx создается или обновляется из базы данных.Я также хотел бы увидеть пример запуска хранимой процедуры (функции) из .edmx в шаблоне T4, поскольку у меня есть процедура, которая возвращает значения Extended Prop.

Спасибо

1 Ответ

2 голосов
/ 08 мая 2013

Итак, несколько вещей, которые следует иметь здесь в виду:

  • Дизайнер на самом деле не расширяемый, но поставщик. Это не очень помогает, потому что написание EF-провайдера - это , а не прогулка в парке. Это действительно сложно.
  • Код, связанный с дизайнером, включая биты, относящиеся к метаданным, в основном запечатан и является внутренним и почти полностью непригодным для использования вами.
  • Однако файл EDMX (сам файл XML) очень хорошо задокументирован: http://msdn.microsoft.com/en-us/data/jj650889 ... Вы можете свободно изменять XML самостоятельно (вручную, с помощью некоторой надстройки или внешней утилиты), если вы придерживаетесь спецификаций.

Общая идея заключается в том, что вы можете использовать собственный инструмент для чтения расширенных свойств и изменения EDMX XML.

Вы будете добавлять «Аннотации» к элементам SSDL (хранить метаданные в EDMX). Эти значения аннотации будут основаны на расширенных свойствах соответствующих объектов в БД.

Позже, когда T4 выполняется, T4 получает коллекции метаданных на основе элементов EDMX. Эти метаданные будут содержать аннотации, которые вы ранее там написали. Почти любой элемент может иметь одну или несколько аннотаций. Затем вы можете добавить пользовательский код в шаблон T4 для обработки аннотаций, основанных на ваших расширенных свойствах. Дизайнер не будет отображать аннотации, и вы не можете манипулировать ими в конструкторе, но он должен сохранять их (не будет перезаписывать их, если они присутствуют в EDMX).

Конечно, это было бы намного проще, если бы конструктор был расширяемым или даже если бы вы могли использовать код, связанный с дизайнером. Прямо сейчас это не тот случай. Большинство частей EF переходят на открытый исходный код, но дизайнера все еще нет (пока). Если дизайнер когда-нибудь попадет в открытый исходный код, вы, вероятно, сможете внести изменения, чтобы начать использовать его - и, учитывая, что сообщество продолжает запрашивать такую ​​функцию, я думаю, что сообщество все равно изменит источник, чтобы это произошло. До этого вам придется вручную редактировать EDMX или написать какой-нибудь инструмент, который сделает это за вас.

...