Создание приложений для работы с бд с использованием ado net entity framework

Обновлено: 04.07.2024

Провайдеры для баз данных

Линейка провайдеров dotConnect для наиболее известных баз данных имеет долгую и успешную историю разработки. dotConnect с его поддержкой таких ORM как Entity Framework и LinqConnect, поддержки специфичной функциональности и типов данных из различных СУБД и многочисленными оптимизациями предоставляет новые подходы к разработке приложений и позволяет в разы уменьшить затраты времени на разработку.

Поддержка специфики СУБД

Провайдеры dotConnect поддерживают специфичную функциональность различных СУБД - различные режимы и протоколы соединений, специфичные типы данных и многое другое. Провайдеры включают компонент Loader для быстрой загрузки больших объемов данных, компонент Dump для полного или частичного сохранения базы данных в SQL-скрипт и ее восстановления из этого скрипта.

Поддержка ORM решений

Провайдеры dotConnect поддерживают такие ORM-решения, как Entity Framework , NHibernate, и LinqConnect - наше собственное ORM решение, совместимое с Microsoft LINQ to SQL и предоставляющее расширенную функциональность с дополнительными возможностями. Провайдеры предоставляются со специальным визуальным редактором ORM-моделей - Entity Developer.

Поддержка технологий Microsoft

Локальное выполнение SQL

Провайдеры dotConnect включают в себя подсистему для локального выполнения SQL, которая позволяет осуществлять выборку данных при помощи обычных SQL-выражений SELECT и редактировать данные при помощи INSERT, UPDATE и DELETE. Вы можете работать с данными облачных приложений как с обычными базами данных.

Поддержка Entity Framework

Провайдеры dotConnect поддерживают Entity Framework для облачных данных и позволяют использовать LINQ to Entities и Entity SQL для доступа к ним. Провайдеры предоставляются со специальным визуальным редактором ORM-моделей для Entity Framework - Entity Developer.

Быстрая загрузка данных

Для большинства поддерживаемых облачных источников провайдеры dotConnect предоставляют класс Loader для быстрой загрузки большого количества записей в источник. Этот класс загружает данные пакетами из множества строк, позволяя задавать максимальное количество строк в пакете.

Unified data access

Интеграция с Visual Studio

Провайдеры dotConnect предоставляют глубокую интеграцию с функциональностью Visual Studio для времени разработки. Вы можете использовать наши провайдеры для создания соединений в Server Explorer и просматривать данные источника, использовать дизайнер DataSet, мастер Data Source, редактор запросов, настройки TableAdapter, предпросмотр данных и прочее.

RAD инструменты

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

Контроль выполнения SQL

Демонстрационные приложения

Мы поставляем различные примеры приложений вместе с нашими провайдерами. Эти примеры демонстрируют использование провайдеров dotConnect в различных видах проектов и помогают быстро научиться использовать наши провайдеры для работы с данными в Ваших приложениях.

Документация

Документация провайдеров dotConnect поможет Вам быстро научиться работать с ними. Наша документация интегрируется с документацией Visual Studio при инсталляции провайдера и доступна как в виде отдельного CHM файла, так и онлайн на нашем сайте.

Быстрая техническая поддержка

Если у вас появились какие-либо вопросы по нашим провайдерам, обратитесь в нашу службу поддержки и мы ответим на все ваши вопросы. Мы отвечаем на вопросы в течение двух рабочих дней, но обычно пользователи получают ответ значительно раньше. Мы предоставляем поддержку по e-mail и на нашем форуме.

Бесплатные обновления в течение года

При покупке любого провайдера dotConnect Вы получаете бесплатную подписку на один год, позволяющую вам скачивать все обновления этого продукта в течение года.

Royalty-free

После покупки лицензии на наш провайдер Вам не придется совершать никаких дополнительных платежей за развертывание или продажу ваших приложений.

Currently we are already using some years the corelab-devart-dotconnect and are really happy about it.

эта статья посвящена использованию средств данных в Visual Studio и не пытается объяснить основные технологии в любой глубине. Предполагается, что у вас есть базовые знания XAML, Entity Framework и SQL. В этом примере также не демонстрируется Архитектура Model-View-ViewModel (MVVM), которая является стандартом для приложений WPF. Однако этот код можно скопировать в собственное приложение MVVM с небольшими изменениями.

Установка и подключение к Northwind

Установите учебную базу данных Northwind, выполнив следующие действия.

в Visual Studio откройте окно обозреватель объектов SQL Server . (SQL Server обозреватель объектов устанавливается как часть рабочей нагрузки хранения и обработки данных в Visual Studio Installer.) разверните узел SQL Server . щелкните правой кнопкой мыши экземпляр LocalDB и выберите создать запрос.

Откроется окно редактора запросов.

скопируйте скрипт Transact-SQL Northwind в буфер обмена. этот сценарий T-SQL создает базу данных Northwind с нуля и заполняет ее данными.

вставьте скрипт T-SQL в редактор запросов, а затем нажмите кнопку выполнить .

По истечении короткого времени выполнение запроса завершается и создается база данных Northwind.

Настройка проекта

добавьте пакет NuGet для Entity Framework 6. В Обозреватель решений выберите узел проекта. в главном меню выберите Project > управление пакетами NuGet.

пункт меню "управление пакетами NuGet"

пакет NuGet Entity Framework

теперь можно использовать Visual Studio для создания модели на основе базы данных Northwind.

Создание модели

Новый элемент модели Entity Framework

Вызовите модель Northwind_model и нажмите кнопку ОК. Откроется мастер EDM . Выберите элемент конструктор EF из базы данных , а затем нажмите кнопку Далее.

Модель EF из базы данных

на следующем экране введите или выберите подключение LocalDB Northwind (например, (LocalDB) \MSSQLLocalDB), укажите базу данных northwind и нажмите кнопку далее.

На следующей странице мастера выберите таблицы, хранимые процедуры и другие объекты базы данных для включения в модель Entity Framework. Разверните узел dbo в представлении в виде дерева и выберите Customers, Orders и Order Details. Оставьте установленными значения по умолчанию и нажмите кнопку Готово.

Выбор объектов базы данных для модели

Файлы модели обозреватель решений EF

Область конструктора для файла EDMX позволяет изменять некоторые свойства и связи в модели. Мы не будем использовать конструктор в этом пошаговом руководстве.

Файлы . TT являются общим целям и необходимо настроить один из них для работы с DataBinding WPF, что требует обсерваблеколлектионс. В Обозреватель решений разверните узел Northwind_model, пока не найдете Northwind_model. TT. (Убедитесь, что вы не используете . Файл Context.tt , который находится непосредственно под EDMX -файлом.)

Замените первое вхождение HashSet<T> на ObservableCollection<T> около строки 51. Не заменяйте второй экземпляр hash.

Нажмите клавиши CTRL + SHIFT + B , чтобы построить проект. По завершении сборки классы модели видимы в мастере источников данных.

Теперь все готово для подключения этой модели к XAML-странице, чтобы можно было просматривать, перемещать и изменять данные.

Привязка модели к странице XAML

можно написать собственный код привязки данных, но гораздо проще позволить Visual Studio сделать это за вас.

в главном меню выберите Project > добавить новый источник данных , чтобы открыть мастер настройки источника данных. Выберите объект , так как вы привязываетесь к классам модели, а не к базе данных:

Мастер настройки источника данных с источником объекта

Разверните узел проекта и выберите Customer (клиент). (Источники для заказов автоматически формируются из свойства навигации Orders в Customer.)

Добавление классов сущностей в качестве источников данных

Перейдите к файлу MainWindow. XAML в представлении кода. Мы постоянно используем XAML для целей этого примера. Измените заголовок MainWindow на что-то более описательное и увеличьте его высоту и ширину до 600 x 800. Вы всегда можете изменить его позже. Теперь добавьте эти три определения строк в главную сетку, одну строку для кнопок навигации, одну для сведений клиента и одну для сетки, которая показывает их заказы:

Теперь откройте файл MainWindow. XAML , чтобы просмотреть его в конструкторе. в результате окно источники данных будет отображаться как параметр в Visual Studio поле окна рядом с областью элементов. щелкните вкладку, чтобы открыть окно, или нажмите клавиши Shift + Alt + D или выберите просмотреть > другие Windows > источники данных. Мы будем отображать каждое свойство в классе Customers в отдельном текстовом поле. Сначала щелкните стрелку в поле со списком Клиенты и выберите сведения. Затем перетащите узел в среднюю часть области конструктора, чтобы разработчик знал, что он должен находиться в средней строке. В случае его невозможности вручную указать строку в XAML. По умолчанию элементы управления размещаются вертикально в элементе Grid, но на этом этапе их можно расположить в форме. Например, может иметь смысл разместить текстовое поле Name сверху, над адресом. Пример приложения для этой статьи переупорядочивает поля и перемещает их в два столбца.

Привязка источника данных клиентов к отдельным элементам управления

В представлении кода теперь можно увидеть новый Grid элемент в строке 1 (средняя строка) родительской сетки. Родительская сетка имеет DataContext атрибут, который ссылается на CollectionViewSource, добавленный в Windows.Resources элемент. Учитывая этот контекст данных, при привязке первого текстового поля к адресу это имя сопоставляется со Address свойством в текущем Customer объекте в CollectionViewSource.

Когда клиент отображается в верхней половине окна, необходимо просмотреть заказы в нижней половине. Заказы отображаются в одном элементе управления представления сетки. Для работы привязки "основной — подробности" необходимо выполнить привязку к свойству Orders в классе Customers, а не к отдельному узлу Orders. Перетащите свойство Orders класса Customers в нижнюю половину формы, чтобы конструктор поместит его в строку 2:

Перетаскивание классов Orders в виде сетки

Visual Studio создала весь код привязки, который подключает элементы управления пользовательского интерфейса к событиям в модели. Для того чтобы увидеть некоторые данные, необходимо написать код для заполнения модели. Сначала перейдите к файлу MainWindow. XAML. CS и добавьте член данных в класс MainWindow для контекста данных. Этот объект, который был создан для вас, действует примерно так же, как элемент управления, отслеживающий изменения и события в модели. Вы также добавите элементы данных CollectionViewSource для клиентов и заказов, а также связанную логику инициализации конструктора. Начало класса должно выглядеть следующим образом:

Добавьте using директиву для System. Data. Entity, чтобы перевести метод расширения нагрузки в область:

Теперь прокрутите вниз и найдите Window_Loaded обработчик событий. обратите внимание, что Visual Studio добавил объект CollectionViewSource. Представляет объект Норсвиндентитиес, выбранный при создании модели. Вы уже добавили это, так что вам это не нужно. Выполним замену кода в Window_Loaded , чтобы метод теперь выглядел следующим образом:

Нажмите клавишу F5. Вы должны увидеть сведения для первого клиента, полученного в CollectionViewSource. Их заказы также должны отображаться в сетке данных. Форматирование не имеет ничего хорошего, так что давайте исправляется. Можно также создать способ просмотра других записей и выполнения базовых операций CRUD.

Настройка макета страницы и добавление сеток для новых клиентов и заказов

расположение по умолчанию, созданное Visual Studio, не идеально подходит для вашего приложения, поэтому мы предоставим конечный XAML-код, чтобы скопировать его в свой исходный текст. Также требуются некоторые «формы» (которые являются сетками), чтобы пользователь мог добавить нового клиента или заказ. Чтобы добавить нового клиента и заказ, необходим отдельный набор текстовых полей, не привязанных к данным CollectionViewSource . Вы можете указать, какую сетку пользователь видит в любой момент, установив свойство Visible в методах обработчика. Наконец, вы добавите кнопку Удалить в каждую строку сетки заказы, чтобы позволить пользователю удалить отдельный заказ.

Сначала добавьте эти стили в Windows.Resources элемент в файле MainWindow. XAML:

Затем замените всю внешнюю сетку этой разметкой:

Добавление кнопок для навигации, добавления, обновления и удаления

в Windows Forms приложениях вы получаете объект BindingNavigator с кнопками для навигации по строкам в базе данных и выполнения базовых операций CRUD. WPF не предоставляет BindingNavigator, но достаточно просто создать его. Это можно сделать с помощью кнопок в горизонтальном StackPanel и связать кнопки с командами, привязанными к методам в коде программной части.

Логика команды состоит из четырех частей: (1) команды, (2) привязки, (3) кнопки и (4) обработчики команд в коде программной части.

Добавление команд, привязок и кнопок в XAML

Сначала добавьте команды в файл MainWindow. XAML внутри Windows.Resources элемента:

CommandBinding сопоставляет RoutedUICommand событие с методом в коде программной части. Добавьте этот CommandBindings элемент после Windows.Resources закрывающего тега:

Теперь добавьте с помощью StackPanel кнопок навигации, добавления, удаления и обновления. Сначала добавьте этот стиль в Windows.Resources :

Во-вторых, вставьте этот код сразу после элемента RowDefinitions для внешнего Grid элемента в верхнюю часть страницы XAML:

Добавление обработчиков команд в класс MainWindow

Код программной части является минимальным, за исключением методов Add и DELETE. Навигация выполняется путем вызова методов для свойства View объекта CollectionViewSource. В этом DeleteOrderCommandHandler примере показано, как выполнить каскадное удаление в заказе. Сначала необходимо удалить связанные с ним Order_Details. UpdateCommandHandler Добавляет нового клиента или заказа в коллекцию или просто обновляет существующего клиента или заказ с учетом изменений, внесенных пользователем в текстовые поля.

Добавьте эти методы обработчика в класс MainWindow в MainWindow. XAML. CS. Если CollectionViewSource для таблицы Customers имеет другое имя, необходимо изменить имя в каждом из этих методов:

Выполнение приложения

Драйверы доступа к базам MS SQL Server

Драйверы объектно-реляционного сопоставления возвращают данные таблиц базы данных в виде экземпляров классов и их свойств. Примером драйверов объектно-ориентированного доступа к базам данных являются Entity Framework и Entity Framework Core.

База данных исходника


Получение данных из базы MS SQL

  • Подготовка подключения к базе. Выбор способа подключения и создание строки подключения.
  • Создание команды получения или обновления данных. SQL команды (запросы) создаются посредством объектов класса SQLCommand.
  • Подключение к базе данных и выполнение команд (SQL запросов). Подключение происходит через объект SQLConnection.
  • Получение данных. Если выполняется команда SELECT, то ожидается возврат данных в виде таблиц. Получить данные помогают объекты классов SQLDataAdapter и SQLDataReader.

Примеры строк подключения к MS SQL Server

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

Подключение к SQL Server

Соединение с базой данных MS SQL Server происходит при помощи экземпляра класса SQLConnection. Завершая сеанс связи с сервером баз данных необходимо явно закрывать соединение вызывая методы Close() или Dispose() .

Объект SqlConnection выходя за пределы области видимости не закрывается самостоятельно. Для гарантированного автоматического закрытия соединения рекомендуется использовать оператор using .

Листинг метода подключения и выполнения запросов к базе данных:

Строка подключения к MS SQL Server создана с помощью построителя, объекта класса SqlConnectionStringBuilder входящего в состав пространства имён Microsoft.Data.SqlClient. Таким способом создаётся синтактически правильная строка подключения к серверу базы данных. Подробнее о создании строки подключения к серверу баз данных можно прочитать в статье о взаимодействии с базой данных через модуль Entity Framework Core.

Объединение подключений - Pooling

Процесс подключения к SQL серверу состоит из нескольких последовательных шагов (установка сетевого соединения, анализ строки подключения, проверка идентификационных данных и др.), каждый из которых занимает некоторое время. При выполнении большого количества запросов к серверу базы данных, общее увеличение времени подключения перед запросами становится заметным и отражается на производительности веб приложения.

Например: "Data Source=PAVEL\SQLEXPRESS_2016;Initial Catalog=DBMSSQL;Integrated Security=True;Pooling=False"

Pooling - сравнение производительности

Для сравнения скорости обработки SQL запросов создадим два одинаковых кода запросов, с оптимизацией подключений и без неё. Две строки запроса к базе: в первой получение данных из одной таблицы, во второй одновременное выполнение сложной команды чтения данных. Для повышения точности измерения каждая команда повторяется установленное количество раз.

Одиночная команда, запрос к одной таблице: строка команды = "SELECT * FROM Sciences";

Сложная команда, запрос данных в одной строке из нескольких таблиц: строка команды = ("SELECT * FROM Sciences;SELECT * FROM Sections;SELECT * FROM SubSections; . . . SELECT * FROM TableN");

Программный код множественных запросов к базе данных с созданием пулов и без использования оптимизации:

Быстродействие SQLDataReader

Сравнительный тест быстродействия двух вариантов команд с включенным и отключенным пулингом соединений. В первом варианте выполняется команда запроса к одной таблице с повтором 100 раз. Во втором варианте выполняется команда запроса данных у 30 таблиц одновременно, также с повтором 100 раз.

Первое подключение к базе с помощью SQLDataReader

Первое подключение к базе данных:
При первом соединении с базой данных одиночная команда с пулингом выполняется почти в 2 раза дольше, чем с отключёнными пулами. Сложные команды выполняются практически одинаковое время. Логично предположить, что дополнительное время затрачивается на создание пула.

Быстродействие SQLDataAdapter

Первое подключение к базе через SQLDataAdapter

Первое подключение к базе данных:
Первое чтение из базы данных с помощью SQLDataAdapter происходит практически аналогично ситуации с SQLDataReader. Но комплексные команды, при включенном пулинге выполняются гораздо быстрее.

Последующие подключения через SQLDataAdapter

Последующие запросы к базе данных:
Последующие запросы одиночных команды выполняются почти в 14 раз быстрее при использовании пулов подключений. Сложные запросы выполняются также чувствительно быстрее с пулингом: в 2,6 раз быстрее подключений без оптимизации. Можно отметить, что SQLDataAdapter обеспечивает гораздо большую скорость выполнения запросов по сравнению с функциональностью SQLDataReader.

Entity Framework Database First

Давайте с нуля в Visual Studio создадим простую базу данных. База будет состоять из стран и их столиц. Далее на основе данной базы, используя подход Database First , создадим объектную модель и выведем на экран данные из базы.

Database First в EF

Мы будем работать с локальной базой данных localdb, которая встроена в Visual Studio:

Database First в EF

Вводим имя "Countries". Так как у нас такой базы нет, то Visual Studio спросит о попытке её создать:

Database First в EF

Теперь в обозревателе серверов мы видим, что подключились к базе данных:

Database First в EF

Database First в EF

Давайте теперь внесём данные в нашу таблицу:

Database First в EF

Занесите в таблицу следующие данные:

Database First в EF

База данных у нас готова, таблица есть, данные в ней тоже есть. Настало время познакомиться с технологией Entity Framework Database First .

Добавляем в наш проект новый элемент:

Database First в EF

Database First в EF

Далее выбираем "Конструктор EF из базы данных":

Database First в EF

Далее выбираем подключение, которое будет использоваться:

Database First в EF

Далее добавляем объекты, которые необходимо включить в нашу модель:

Database First в EF

При нажатии на кнопку "Готово" происходит магия Entity Framework, в результате которой будет создана модель и классы:

Database First в EF

Database First в EF

Обратим внимание на класс "CountriesEntities", который находится в файле "MyModel.Context.cs":

Database First в EF

Контекст хранит все сущности из базы данных.

Теперь переходим к самому интересному (то, ради чего мы всё это проделали). Давайте выведем на экран информацию из базы данных:

Вот таким нехитрым способом, не написав ни одной строчки кода для взаимосвязи с базой данных, мы смогли получить все данные из неё.

В данной статье вы научились создавать локальную базу данных в Visual Studio, а также познакомились с подходом Database First.

На связи был Алексей Гулынин, оставляйте свои комментарии, увидимся в следующих статьях.

Читайте также: