1. Главная страница » Компьютеры

Entity framework хранимые процедуры

Автор: | 16.12.2019

Работа с хранимыми процедурами во многом аналогична работе с функциями базы данных. Итак, возьмем бд из прошлой темы и добавим в нее новую процедуру. Для этого откроем подключение к базе данных в окне Database Explorer и найдем в его структуре узел Stored Procedures (Хранимые процедуры). Нажмем на этот узел правой кнопкой мыши и в появившемся меню выберем Add New Stored Procedure :

После этого Visual Studio сгенерирует код процедуры по умолчанию:

Изменим ее следующим образом:

Данная процедура ищет все строки, где значение столбца название компании равно строке, переданной через параметр @name.

Далее нажмем на кнопку Update для добавления хранимой процедуры:

И затем в появившемся окошке нажимаем кнопку Update Database:

После этого в узле Stored Procedures появится новая хранимая процедура. Перед ее использованием мы можем проверить ее, чтобы убедиться, что она работает как надо и получает нужные данные. Для этого нажмем на нее правой кнопкой мыши и выберем в меню Execute :

После этого нам откроется окно настройки входного параметра. В поле Value введем какое-нибудь имя, по которому будем осуществлять поиск и нажмем ОК:

И Visual Studio автоматически генерирует и запускает скрипт на языке SQL с вызовом процедуры и передачи ей параметра:

Теперь обратимся к процедуре в коде C#:

Параметр в методе SqlQuery принимает название процедуры, после которого идет перечисление параметров: GetPhonesByCompany @name

В этом пошаговом руководстве показано, как сопоставлять операции Create @ no__t-0insert, Update и Delete (CUD) типа сущности с хранимыми процедурами с помощью Entity Framework Designer (EF Designer). This step-by-step walkthrough show how to map the createinsert, update, and delete (CUD) operations of an entity type to stored procedures using the Entity Framework Designer (EF Designer). По умолчанию Entity Framework автоматически создает инструкции SQL для операций CUD, но можно также сопоставлять хранимые процедуры с этими операциями. By default, the Entity Framework automatically generates the SQL statements for the CUD operations, but you can also map stored procedures to these operations.

Обратите внимание, что Code First не поддерживает сопоставление с хранимыми процедурами или функциями. Note, that Code First does not support mapping to stored procedures or functions. Однако можно вызывать хранимые процедуры или функции с помощью метода System. Data. Entity. DbSet. SqlQuery. However, you can call stored procedures or functions by using the System.Data.Entity.DbSet.SqlQuery method. Пример: For example:

Рекомендации по сопоставлению операций CUD с хранимыми процедурами Considerations when Mapping the CUD Operations to Stored Procedures

При сопоставлении операций CUD с хранимыми процедурами применяются следующие соображения. When mapping the CUD operations to stored procedures, the following considerations apply:

  • При сопоставлении одной из операций CUD с хранимой процедурой сопоставьте все эти операции. If you are mapping one of the CUD operations to a stored procedure, map all of them. Если не выполнить сопоставление всех трех, несопоставленные операции завершатся неудачей, если они будут выполнены, и будет выдано исключение упдатиксцептион will. If you do not map all three, the unmapped operations will fail if executed and an UpdateException will be thrown.
  • Необходимо сопоставлять каждый параметр хранимой процедуры со свойствами сущности. You must map every parameter of the stored procedure to entity properties.
  • Если сервер создает значение первичного ключа для вставленной строки, необходимо преобразовать это значение обратно в свойство ключа сущности. If the server generates the primary key value for the inserted row, you must map this value back to the entity’s key property. В следующем примере процедура инсертперсон stored Возвращает созданный первичный ключ как часть результирующего набора хранимой процедуры. In the example that follows, the InsertPerson stored procedure returns the newly created primary key as part of the stored procedure’s result set. Первичный ключ сопоставляется с ключом сущности (PersonID) с помощью привязок результатов feature конструктора EF. The primary key is mapped to the entity key (PersonID) using the feature of the EF Designer.
  • Вызовы хранимых процедур сопоставляются с сущностями в концептуальной модели 1:1. The stored procedure calls are mapped 1:1 with the entities in the conceptual model. Например, если в концептуальной модели реализуется иерархия наследования, а затем сопоставляются хранимые процедуры CUD для родительских (базовых) и дочерних (производных) сущностей, сохранение дочерних изменений будет вызывать только дочернийэлемент хранимых процедур, они не активируют вызовы хранимых процедур родительскогообъекта. For example, if you implement an inheritance hierarchy in your conceptual model and then map the CUD stored procedures for the Parent (base) and the Child (derived) entities, saving the Child changes will only call the Child’s stored procedures, it will not trigger the Parent’s stored procedures calls.

Предварительные требования Prerequisites

Для выполнения данного пошагового руководства требуется: To complete this walkthrough, you will need:

  • Последняя версия Visual Studio. A recent version of Visual Studio.
  • Образец базы данных School. The School sample database.

Настройка проекта Set up the Project

  • Откройте Visual Studio 2012. Open Visual Studio 2012.
  • Выберите файл-> новый проект-> . Select File-> New -> Project
  • В левой области щелкните Visual C @ no__t-1, а затем выберите шаблон консоли . In the left pane, click Visual C#, and then select the Console template.
  • Введите кудспрокссампле@no__t — 1As имя. Enter CUDSProcsSample as the name.
  • Нажмите кнопку ОК. Select OK.

Создание модели Create a Model

Щелкните правой кнопкой мыши имя проекта в обозреватель решений и выберите Добавить-> новый элемент. Right-click the project name in Solution Explorer, and select Add -> New Item.

Выберите данные в меню слева, а затем выберите ADO.NET EDM в области Шаблоны. Select Data from the left menu and then select ADO.NET Entity Data Model in the Templates pane.

Введите кудспрокс. EDMX в поле имя файла и нажмите кнопку Добавить. Enter CUDSProcs.edmx for the file name, and then click Add.

В диалоговом окне Выбор содержимого модели выберите пункт создать из базы данных, а затем нажмите кнопку Далее. In the Choose Model Contents dialog box, select Generate from database, and then click Next.

Нажмите кнопку создать соединение. Click New Connection. В диалоговом окне Свойства соединения введите имя сервера (например, (LocalDB)mssqllocaldb), выберите метод проверки подлинности, введите School в качестве имени базы данных и нажмите кнопку ОК. In the Connection Properties dialog box, enter the server name (for example, (localdb)mssqllocaldb), select the authentication method, type School for the database name, and then click OK. В диалоговом окне Выбор подключения к данным будет обновлен параметр подключения к базе данных. The Choose Your Data Connection dialog box is updated with your database connection setting.

В диалоговом окне Выбор объектов базы данных в разделе таблицы node выберите таблицу Person . In the Choose Your Database Objects dialog box, under the Tables node, select the Person table.

Кроме того, выберите следующие хранимые процедуры в узле хранимые процедуры и функции : Делетеперсон, инсертперсони упдатеперсон. Also, select the following stored procedures under the Stored Procedures and Functions node: DeletePerson, InsertPerson, and UpdatePerson.

Начиная с Visual Studio 2012 конструктор EF поддерживает неполное импортирование хранимых процедур. Starting with Visual Studio 2012 the EF Designer supports bulk import of stored procedures. По умолчанию флажок Импорт выбранных хранимых процедур и функций в сущностную модель установлен. The Import selected stored procedures and functions into the entity model is checked by default. Поскольку в этом примере у нас есть хранимые процедуры для вставки, обновления и удаления типов сущностей, мы не хотим импортировать их и снять этот флажок. Since in this example we have stored procedures that insert, update, and delete entity types, we do not want to import them and will uncheck this checkbox.

Нажмите кнопку Готово. Click Finish. Отобразится конструктор EF, предоставляющий область конструктора для редактирования модели. The EF Designer, which provides a design surface for editing your model, is displayed.

Сопоставьте сущность Person с хранимыми процедурами Map the Person Entity to Stored Procedures

Щелкните правой кнопкой мыши тип Person entity и выберите сопоставление хранимых процедур. Right-click the Person entity type and select Stored Procedure Mapping.

Сопоставления хранимых процедур отображаются в сведениях о Сопоставлении window. The stored procedure mappings appear in the Mapping Details window.

Щелкните Click . Поле становится раскрывающимся списком хранимых процедур в модели хранения, которые могут быть сопоставлены с типами сущностей в концептуальной модели. The field becomes a drop-down list of the stored procedures in the storage model that can be mapped to entity types in the conceptual model. Выберите инсертперсон from раскрывающегося списка. Select InsertPerson from the drop-down list.

Появятся применяемые по умолчанию сопоставления параметров хранимой процедуры со свойствами сущности. Default mappings between stored procedure parameters and entity properties appear. Обратите внимание на то, что направление сопоставления указывают стрелки: значения свойств передаются параметрам хранимой процедуры. Note that arrows indicate the mapping direction: Property values are supplied to stored procedure parameters.

Введите невперсонид, имя параметра, возвращаемое процедурой инсертперсон stored. Type NewPersonID, the name of the parameter returned by the InsertPerson stored procedure. Убедитесь, что не вводите начальные или конечные пробелы. Make sure not to type leading or trailing spaces.

Нажмите клавишу Ввод. Press Enter.

По умолчанию невперсонид is, сопоставленный с ключом сущности PersonID. By default, NewPersonID is mapped to the entity key PersonID. Обратите внимание на то, что стрелка указывает направление сопоставления: значение столбца результата передается свойству. Note that an arrow indicates the direction of the mapping: The value of the result column is supplied to the property.

Щелкните Click and select UpdatePerson from the resulting drop-down list.

Появятся применяемые по умолчанию сопоставления параметров хранимой процедуры со свойствами сущности. Default mappings between stored procedure parameters and entity properties appear.

Щелкните Click and select DeletePerson from the resulting drop-down list.

Появятся применяемые по умолчанию сопоставления параметров хранимой процедуры со свойствами сущности. Default mappings between stored procedure parameters and entity properties appear.

Операции вставки, обновления и удаления типа Person entity теперь сопоставлены с хранимыми процедурами. The insert, update, and delete operations of the Person entity type are now mapped to stored procedures.

Если необходимо включить проверку параллелизма при обновлении или удалении сущности с хранимыми процедурами, используйте один из следующих вариантов. If you want to enable concurrency checking when updating or deleting an entity with stored procedures, use one of the following options:

  • Используйте выходной параметр, чтобы получить количество затронутых строк из хранимой процедуры и проверить затронутый параметр Rows checkbox рядом с именем параметра. Use an OUTPUT parameter to return the number of affected rows from the stored procedure and check the Rows Affected Parameter checkbox next to the parameter name. Если возвращаемое значение равно нулю при вызове операции, выдается исключение оптимистикконкурренциексцептион will. If the value returned is zero when the operation is called, an OptimisticConcurrencyException will be thrown.
  • Установите флажок использовать исходное значение рядом со свойством, которое необходимо использовать для проверки параллелизма. Check the Use Original Value checkbox next to a property that you want to use for concurrency checking. При попытке обновления значение свойства, которое было первоначально считано из базы данных, будет использоваться при записи данных обратно в базу данных. When an update is attempted, the value of the property that was originally read from the database will be used when writing data back to the database. Если значение не соответствует значению в базе данных, выдается исключение оптимистикконкурренциексцептион will. If the value does not match the value in the database, an OptimisticConcurrencyException will be thrown.

Использование модели Use the Model

Откройте файл Program.CS , в котором определен метод Main . Open the Program.cs file where the Main method is defined. Добавьте следующий код в функцию main. Add the following code into the Main function.

Код создает новый объект Person , затем обновляет объект и, наконец, удаляет объект. The code creates a new Person object, then updates the object, and finally deletes the object.

  • Скомпилируйте и запустите приложение. Compile and run the application. Программа выдает следующие выходные данные * The program produces the following output *

PersonID автоматически создается сервером, поэтому, скорее всего, будет отображаться другое число * PersonID is auto-generated by the server, so you will most likely see a different number*

При работе с конечной версией Visual Studio можно использовать IntelliTrace с отладчиком для просмотра инструкций SQL, которые будут выполнены. If you are working with the Ultimate version of Visual Studio, you can use Intellitrace with the debugger to see the SQL statements that get executed.

Рубрика: Информационные технологии

Дата публикации: 18.03.2017 2017-03-18

Статья просмотрена: 251 раз

Библиографическое описание:

Бакаев И. И., Шафиев Т. Р. Применение хранимых процедур в Entity Framework // Молодой ученый. — 2017. — №11. — С. 36-38. — URL https://moluch.ru/archive/145/40559/ (дата обращения: 19.11.2019).

Entity Framework имеет возможность автоматически строить собственные команды для базы данных на основе LINQ to Entities или запросов Entity SQL, а также, строить этих команд для вставки, обновления или удаления данных.

Вы можете переопределить эти команды и использовать свои собственные предопределенные хранимые процедуры. А также можете использовать хранимые процедуры либо для получения данных или добавления / обновления / удаления записей в одной или нескольких таблиц базы данных. [1]

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

Основным языком программирования для СУБД SQL SERVER продолжает оставаться T-SQL, который не обеспечивает такую же поддержку разносторонних способов управления ходом выполнения программы, как процедурные языке наподобие C, C++, Visual Basic, Java, Delphi и т. д. Однако T-SQL становится буквально непревзойденным, когда с его помощью осуществляются операции определения данных, манипулирования данными и доступа к данным, а предусмотренные в нем процедурные конструкции позволяют вполне успешно решать большинство практических задач. [2]

Хранимые процедуры и определяемые пользователем функции (UDF) в базе данных представлены в виде функций в рамках сущности. EDM не будет иметь какой-либо объект для хранимых процедур в дизайнере EDM. [1]

Здесь мы добавим следующую хранимую процедуру StudentByGroupId в EDM. Эта процедура возвращает всех студентов, которые назначены для конкретной группы:

CREATE PROCEDURE [dbo].[StudentByGroupId]

— Здесь добавлять параметры процедуры

SELECT s.Id, s.sname,s.GroupId,g.gname

from Student s Inner Join GroupStudent g ON s.Group >

Во-первых, создайте новую модель данных объекта ADO.Net, используя EF Designer from database.

Выберите StudentByGroupId. Убедитесь, что Import selected stored procedures and functions into the entity model установлен флажок, а затем нажмите кнопку Finish.

Вы увидите StudentByGroupId добавлен в Function Imports с новым сложным типом StudentByGroupId _Result в Model Browser. Всякий раз, когда вы импортируйте хранимую процедуру в модель, она создает новый сложный тип с именем _Result по умолчанию. [3]

Рис 1. Окно Model Browser

StudentByGroupId возвращает те же поля, определенные в сущности студент. Таким образом, нам не нужно добавлять новый сложный тип возвращаемых данных из StudentByGroupId. Вы можете изменить его, щелкнув правой кнопкой мыши на StudentByGroupId импорта функций и нажмите Edit. Проверьте Entities и выберите из выпадающего списка Student в всплывающем окне, как показано ниже [3, c. 237]

Рис 2. Окно Edit Function Import

Теперь StudentByGroupId может быть вызван и результат, показанный ниже, будут возвращены:

public ActionResult Index()

var student = context.StudentByGroupId(1);

Код, показанный выше, выполнит следующий оператор:

Exec [DBO]. [StudentByGroup >

  1. Julia Lerman. Programming Entity Framework, Second Edition. 2010. Printed in the United States of America.
  2. Виейра, Роберт. Программирование баз данных Microsoft SQL Server 2005. Базовый курс: Пер. с англ. — М.: ООО “И. Д. Вильямс”, 2007. — 832с.: ил. — Парал. тит. англ.
  3. Julia Lerman, Rowan Miller. Programming Entity Framework: DbContext. 2012. Printed in the United States of America.
  4. Tom Dykstra, Rick Anderson. Getting Started with Entity Framework 6 Code First using MVC 5. 2014.

Похожие статьи

СУБД Oracle: DDL триггер, как средство контроля изменения.

Контроль изменений в структуре базы данных (БД), с

Примечание: DDL (Data Definition Language, язык определения данных) – это. подмножество SQL, используемое

Значением данной переменной является CREATE, ALTER или DROP, в зависимости от типа операции.

Выбор SQL Server для медицинского учреждения

В состав Microsoft SQL Server входит мощный язык работы с данными: Transact SQL, который поддерживает такие объекты базы данных как хранимые процедуры, триггеры, представления.

Некоторые особенности использования технологии noSQL

NoSQL не накладывает ограничений на типы хранимых данных и, при необходимости, в процессе работы, можно добавлять «на лету» новые типы.

Вот признаки проектов, для которых идеально подойдут SQLбазы.

Технология ADO и средства доступа к реляционным базам данных

Хранение данных в объектах DataSet. При работе с базой данных нам чаще всего приходится работать не с одной, а несколькими записями.

ADO.NET поддерживает два типа источников данныхSQL Managed Provider и ADO Managed Provider.

Реализация алгоритма Metaphone для кириллических фамилий.

CREATE FUNCTION dbo.MetaPhoneRu (@W varchar(4000)).

– М.: Вильямс, 2008, – 720 с. 2. Виейра Р. Программирование баз данных Microsoft SQL Server 2008. Базовый курс.

Компьютерная технология автоматизирования информационной.

Данный тип сценария позволяет решить противоречия в базе данных. Язык SQL — это язык выполнения запросов для базы данных.

Для добавления необходимой информации в данные нужны процедуры, они называются процедурами, сохраненными в базе.

Асинхронное выполнение SQL-запросов на языке.

Ключевые слова: PHP, SQL, cURL, многопоточная обработка, потоки

Методов разбора SQL-запроса может быть несколько, речь идет о SELECT запросах

на языке Паскаль: типы данных, арифметические выражения, оператор присваивания» для студентов бакалавриата.

Экспорт данных о ролевой политике безопасности из Системы.

В СУБД ORACLE существует два типа привилегий: системные и объектные.

Поиск всех ролей в базе данных. Для каждой роли запуск процедуры поиска выданных

Использование апостериорного анализа данных для обнаружения аномалий в SQL-запросах к базам данных.

Обзор методов обнаружения аномалий в SQL-запросах к базам.

Одним из способов обеспечения безопасности баз данных (БД) является использование

Обучение производится на базе записей из журналов приложения, которые хранят описание

Этот вектор содержит описание типа SQL-команды, множества отношений, к которым.

Читайте также:  Format data в рекавери что это

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *