Как я могу заставить дизайнера модели данных Entity использовать описания столбцов моей базы данных? - PullRequest
21 голосов
/ 01 мая 2010

Я использую EF4 с Visual Studio 2010. У меня уже есть база данных SQL, и все мои столбцы задокументированы с помощью свойства Description в SQL Management Studio. Когда я создаю edmx в Visual Studio, как я могу заставить его читать эти описания и использовать их для добавления комментариев к моим сгенерированным классам? Я знаю, что могу использовать Summary и LongDescription в свойствах edmx, но я ищу способ сделать это без необходимости копировать и вставлять каждое описание.

Спасибо!

Ответы [ 3 ]

5 голосов
/ 20 января 2011

Для этого есть запрос функции. Не стесняйтесь добавлять свои голоса, чтобы сделать это доступным в будущем: Получение описаний SQL в запросе функциональности Entity-Framework

У Хуагати есть несколько отличных инструментов для работы с EF и L2S. Одной из функций является обновление документации EF на основе базы данных SQL: Сайт Huagati

С веб-сайта: обновлять документацию ADO.NET Entity Data Model из базы данных, получать описания таблиц и столбцов в свободном тексте, а также определения индексов из базы данных и обновлять поля документации XML в конструкторе EDMX с описаниями.

Кажется, они ищут эти поля в базе данных, а затем напрямую обновляют XML модели. Возможно, кто-то может создать надстройку VS, которая будет делать то же самое без цены, если это единственная функция, которую вы хотели. Я добавлю это в свой список "будущих" проектов (хотя, похоже, я никогда не найду время для них!) .

Надеюсь, это поможет!

2 голосов
/ 29 июля 2011

Я искал способы взломать что-нибудь вместе, чтобы заполнить edmx метаданными из базы данных.

Свойства edmx сводки и подробного описания хранятся в элементах элемента EntityType.

<EntityType Name="EntityName">
    <!-- Without this element classes are typically generated with 
         "No Metadata Documentation available." -->
    <Documentation>
            <Summary>Entity Summary</Summary>
            <LongDescription>Entity Long Description</LongDescription>
          </Documentation>
    <Key>
      <PropertyRef Name="Id" />
    </Key>
    <Property Name="Id" Type="String" Nullable="false" MaxLength="25" Unicode="false" FixedLength="true" />
    <!-- Lots of other properties -->
  </EntityType>

Соответствующий раздел файла edmx, Язык определения схемы хранилища (SSDL), создается System.Data.Entity.Design.EntityStoreSchemaGenerator.GenerateStoreMetadata () . Или, по крайней мере, так обстоит дело с EdmGen.

Я собираюсь посмотреть, можно ли EntityStoreSchemaGenerator.StoreItemCollection изменить перед использованием EntityStoreSchemaGenerator.WriteStoreSchema (...) для вывода XML.

Обновление

Ну, это раздражало. System.Data.Metadata.Edm.Documentation запечатан и имеет только внутренний конструктор. Оба интересующих свойства могут быть установлены только внутри. Так что похоже на тупиковый подход.

1 голос
/ 01 июля 2010

Я не знаю, что сам дизайнер имеет какие-то точки расширяемости. Однако после заполнения полей Summary и LongDescription в файле edmx эти значения останутся там, даже если вы внесете другие изменения или повторно обновите модель из базы данных. Если вы не удалите таблицу и не добавите ее снова, эти значения останутся заполненными.

Таким образом, вы можете либо просто скопировать и вставить их все по одному (сколько таблиц в вашей модели? Это происходит быстрее, чем вы думаете), либо написать программу для извлечения информации из вашей базы данных (используя SQL SMO или что-то в этом роде), и попросите эту программу отредактировать ваш файл edmx, заполнив поля Summary и LongDescription (создавайте резервную копию вашего edmx каждый раз, когда вы пробуете свою программу - вы не хотите запускать файл edmx и начинать заново) .

Если у вас есть большие модели, и вы делаете их много, то написание программы для этого автоматически стоит вашего времени. Если у вас есть только несколько моделей с не слишком большим количеством таблиц, скопируйте и вставьте.

Возможно, вы захотите отправить отзыв команде Entity Framework здесь . Похоже, что дизайнер должен автоматически подобрать поле описания из SQL Server. Сделал бы хороший запрос функции.

...