Подтвердить что ты не робот

Как я могу сделать конструктор модели данных Entity использовать описания столбцов базы данных?

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

Спасибо!

4b9b3361

Ответ 1

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

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

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

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

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

Ответ 2

Я рассматривал способы взлома чего-то вместе, чтобы заполнить 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 запечатан и имеет только внутренний конструктор. Оба свойства, представляющие интерес, могут быть установлены только внутри. Таким образом, это похоже на тупиковый подход.

Ответ 3

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

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

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

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