Код приложения средства для заметок и исследований (образец приложения модели EDM)
Приложение Annotation Research Tool модели Entity Data Model (EDM) реализовано с использованием формы Windows Forms и элементов управления из области элементов Visual Studio.
Элемент управления WebBrowser используется для отображения веб-ссылок. Различные текстовые поля позволяют пользователям вводить сведения, которые станут заметками или контактной информацией. Строки URL-адресов, назначаемые свойству Locator экземпляров Reference, получаются от объекта документа страницы, отображенной в WebBrowser при создании экземпляров класса ReferenceDescriptor. После ввода данных пользователями всю работу выполняют обработчики событий. Интерфейс пользователя см. в Средство Annotation and Research Collaboration Tool (образец приложения модели EDM).
Исполняемый файл конфигурации и строка соединения
В следующем исполняемом файле конфигурации содержится строка соединения и сведения о конфигурации базы данных SQL Server или SQL Server Compact 3.5. Также имеются ссылки на пространство имен System.Data.EntityClient, которое содержит классы, используемые соединением и метаданными.
Эта строка соединения устанавливает для параметра режима MARS значение true , что необходимо для вызова метода Load в ассоциациях, когда в том же соединении уже открыт другой модуль чтения данных.
Инициализация соединения с хранилищем
Одной строки кода достаточно, чтобы соединиться с данными, используемым этим приложением, когда в проекте предыдущий исполняемый файл конфигурации находится в области действия исполняемого объекта и имеется ссылка на файл System.Data.Entity.dll.
Эта инициализация используется всеми обработчиками событий, которые это приложение задействует, чтобы запрашивать или обновлять данные. Соединение разрывается при помощи следующей инструкции:
Создание дескриптора ссылки
Следующий код создает экземпляр класса ReferenceDescriptor и сохраняет его в хранилище. Эта последовательность определяет, существует ли уже страница в окне WebBrowser как объект Reference. Если нет, то создается новый экземпляр сущности Reference с дескриптором ссылки ReferenceDescriptor. Если сущность Reference еще не находится в хранилище, она добавляется туда при помощи вызова метода AddToReference: researchCollaborationData.AddToReferecne(newReference) . Сущность ReferenceDescriptor добавляется в хранилище при помощи вызова researchCollaborationData.AddToReferenceDescriptor(newReferenceDescriptor) .
Сущность ReferenceDescriptor также добавляется в коллекцию, представленную свойством навигации сущности Reference под названием RefDescriptors: newReference.RefDescriptors.Add(newReferenceDescriptor) .
Для создания экземпляра сущности Reference приложение не использует метод без связанной с ним сущности ReferenceDescriptor.
Создание экземпляра ContactPerson
Для создания нового экземпляра сущности ContactPerson и ассоциирования его с сущностью Reference используется такая же процедура, как для создания экземпляра сущности ReferenceDescriptor и его ассоциирования с сущностью Reference. Можно использовать четыре варианта кода в зависимости от того, существует ли уже только сущность ContactPerson или еще и сущность Reference. В первом случае при создании экземпляра сущности ReferenceDescriptor всегда создается новый экземпляр дескриптора. В процессе ассоциирования сущности ContactPerson с сущностью Reference определяется, представляет ли уже экземпляр сущности ContactPerson это контактное лицо.
Сущность ReferenceDescriptor ассоциируется только с одной сущностью Reference, тогда как экземпляр сущности ContactPerson можно ассоциировать с несколькими сущностями References. Дополнительные сведения об ассоциациях Association типа «многие ко многим», поддерживающих эту связь, см. в разделе Схемы программы Annotation Research Tool (образец приложения модели EDM).
Все четыре кодовых пути в следующем обработчике событий связывают экземпляры сущности ContactPerson с экземплярами сущности Reference. При использовании первого варианта создается новый экземпляр сущности ContactPerson и новая сущность Reference. Новый экземпляр сущности ContactPerson и новая сущность Reference добавляются в хранилище при помощи методов AddToContactPerson и AddToReference. Поскольку это ассоциация типа «многие ко многим», сущность новой ссылки также должна быть создана в виде экземпляра, а ее свойства навигации инициализированы, чтобы подключить экземпляры сущностей ContactPerson и Reference.
Этот код создает экземпляр сущности ссылки ContactPersonReference. Сущность ссылки имеет свойства навигации, представляющие два следующих элемента ассоциации: RelatedContact и RelatedReference. Это назначенные новые экземпляры сущностей ContactPerson и Reference, созданные в этом кодовом пути. В других случаях, когда одна из двух сущностей — ContactPerson либо Reference — или обе уже существуют, назначения используют существующие экземпляры, обнаруженные запросами к объектам.
Новая сущность ссылки добавляется в хранилище, а все экземпляры этой сущности сохраняются в следующем коде.
В следующей последовательности продемонстрированы два из четырех возможных кодовых пути. Полный обработчик события см. в методе private void buttonCreateRefPerson_Click(object sender, EventArgs e) в полном коде обработчиков события в конце этого раздела. .
Использование дескрипторов ссылок для поиска ссылок
Экземпляры сущности ReferenceDescriptor являются заметками, которые используются, чтобы описывать и находить веб-ресурсы, чтобы поиск не нужно было проводить повторно или каталогизировать где-то еще. Каждый экземпляр сущности ReferenceDescriptor является одной заметкой. Веб-страницу можно описать при помощи нескольких экземпляров сущности ReferenceDescriptor, однако каждый экземпляр может быть ассоциирован только с одной страницей.
Заметки к веб-ссылкам создаются путем добавления экземпляров сущности ReferenceDescriptor, как описано в предыдущих сегментах кода. Поиск свойств Annotation и Keyword экземпляров сущности ReferenceDescriptor является средством перемещения полезных страниц сущности Reference. Когда пользователь вводит ключевые слова или поисковую фразу в текстовое поле поиска и нажимает кнопку Find, задействуется следующий обработчик события.
Этот код состоит из двух базовых последовательностей: одной для создания списка строк поиска List<T>, а другой, чтобы запрашивать совпадающий текст в свойствах Keyword и Annotation экземпляров сущности ReferenceDescriptor.
Список строк поиска создается путем синтаксического анализа входного текста. Запрос является параметризированным методом ObjectQuery, используемым в цикле, в котором каждая строка поиска вставляется в запрос и сравнивается с текстом, назначенным свойствам Keyword и Annotation экземпляров сущности ReferenceDescriptor в хранилище. Экземпляры классов ObjectParameter и ObjectQuery создаются в следующем сегменте кода.
Каждый экземпляр сущности ReferenceDescriptor, возвращаемый запросом ObjectQuery, попадает в цикл, который загружает связанный экземпляр сущности Reference при помощи предназначенных для этого свойства навигации NavigationProperty и ассоциации Association данного экземпляра. Следующий сегмент кода загружает экземпляр сущности Reference, читает ее свойство Locator и отображает URL-адрес сущности Reference в виде ссылки в итоговом текстовом поле.
И наконец, метод находит и отображает сведения о контактных лицах, связанных с сущностью Reference. Статический метод объекта LinkTable_ReferenceAssociation используется для обнаружения сущностей таблицы ссылок, ассоциированных с сущностью Reference. Экземпляры сущности ContactPersonReference, сущности таблицы ссылок, которые содержат сущность Reference, попадают в цикл, который загружает и отображает свойства связанной сущности ContactPerson. Свойства FirstName, LastName, Title и Email отображаются вместе с текстом ReferenceAnnotation и Locator, найденным предыдущим кодом.
Поиск ссылок, ассоциированных с контактными лицами
Экземпляры сущности Reference, связанные с экземплярами сущности ContactPerson, можно находить при помощи той же сущности таблицы ссылок и ассоциаций, использованной в предыдущем сегменте кода. Пользователи этого приложения могут находить ссылки на страницы от контактных лиц, введя текст в текстовые поля LastName или Email и нажав кнопку Find Ref/Person. Будут созданы новые экземпляры ObjectParameter из текста LastName и Email. Эти параметры используются методом ObjectQuery, чтобы искать человека с совпадающей фамилией или адресом электронной почты. Метод Any объекта ObjectQuery используется для проверки наличия результатов этого запроса.
Если найден экземпляр сущности ContactPerson с совпадающей фамилией или адресом электронной почты, контактные сведения отображаются с ассоциированными документами Reference. Как и в предыдущем методе, соответствующие документы находятся при помощи сущности ContactPersonReference и ее свойств навигации.
Полный код обработчика события приложения
Следующий код содержит все обработчики событий, используемые для инициализации объекта EntityConnection, а также поиска и обновления данных, которые построены по модели данных совместной работы для исследований.
О платформе
Ресурс не связан с какой-либо тематикой. Он создан как автоматический инфо-агрегатор, собирающий данные из открытых источников. Мы не фильтруем, не правим и не проверяем публикации вручную.
Навигационные модули
Общее
Нейтральный контент, подходящий под разные запросы. Подборки без тематической привязки.
Разное
Неочевидные и случайные темы, собранные алгоритмом из публичных источников.
Региональные включения
Иногда контент касается локальных событий или упоминает регионы РФ и ближнего зарубежья.
Контакты
📍 г. Тверь, ул. Новая, д. 11, офис 405
☎ +7 (4822) 68-44-21
📧 info@site.ru
🕓 Время поддержки: с 10:00 до 20:00 без выходных
Условия использования
Информация на сайте размещается в автоматическом режиме и не редактируется вручную. Администрация не проверяет тексты на достоверность и не гарантирует их соответствие законодательству.
Мы не создаём контент, а только агрегируем из открытых публичных источников. Сайт не имеет статуса СМИ и не подлежит лицензированию.
По вопросам удаления контента — свяжитесь с нами, и мы рассмотрим обращение в кратчайшие сроки.