Я очень новичок в Entity Framework 6, и я хочу реализовать хранимые процедуры в моем проекте. У меня есть хранимая процедура следующим образом:
ALTER PROCEDURE [dbo].[insert_department]
@Name [varchar](100)
AS
BEGIN
INSERT [dbo].[Departments]([Name])
VALUES (@Name)
DECLARE @DeptId int
SELECT @DeptId = [DeptId]
FROM [dbo].[Departments]
WHERE @@ROWCOUNT > 0 AND [DeptId] = SCOPE_IDENTITY()
SELECT t0.[DeptId]
FROM [dbo].[Departments] AS t0
WHERE @@ROWCOUNT > 0 AND t0.[DeptId] = @DeptId
END
Department
класс:
public class Department
{
public int DepartmentId { get; set; }
public string Name { get; set; }
}
modelBuilder
.Entity<Department>()
.MapToStoredProcedures(s =>
s.Update(u => u.HasName("modify_department")
.Parameter(b => b.Department, "department_id")
.Parameter(b => b.Name, "department_name"))
.Delete(d => d.HasName("delete_department")
.Parameter(b => b.DepartmentId, "department_id"))
.Insert(i => i.HasName("insert_department")
.Parameter(b => b.Name, "department_name")));
protected void btnSave_Click(object sender, EventArgs e)
{
string department = txtDepartment.text.trim();
// here I want to call the stored procedure to insert values
}
Моя проблема: как я могу вызвать хранимую процедуру и передать в нее параметры?
Ответы:
Вы можете вызвать хранимую процедуру в своем
DbContext
классе следующим образом.Но если ваша хранимая процедура возвращает несколько результирующих наборов в качестве примера кода, вы можете увидеть эту полезную статью на MSDN
Хранимые процедуры с несколькими наборами результатов
источник
"storedProcedureName @param1, @param2"
. Также типparams
естьSystem.Data.SqlClient.SqlParameter[]
.this.Database.SqlQuery<YourEntityType>("storedProcedureName @param1", new System.Data.SqlClient.SqlParameter("@param1", YourParam));
Все, что вам нужно сделать, это создать объект, который имеет те же имена свойств, что и результаты, возвращаемые хранимой процедурой. Для следующей хранимой процедуры:
создать класс, который выглядит так:
и затем вызовите процедуру, выполнив следующее:
Результат будет содержать список
ResultForCampaign
объектов. Вы можете позвонить,SqlQuery
используя столько параметров, сколько необходимо.источник
Я решил это с
ExecuteSqlCommand
Поместите свой собственный метод, такой как мой, в DbContext как свои собственные экземпляры:
так что вы можете иметь метод в вашем коде позади этого:
это мой ИП:
надежда помогла тебе
источник
Используя ваш пример, вот два способа сделать это:
1 - Использовать отображение хранимых процедур
Обратите внимание, что этот код будет работать с отображением или без него. Если вы отключите отображение объекта, EF сгенерирует оператор вставки + выбора.
2 - Вызовите хранимую процедуру напрямую
Я рекомендую использовать первый подход, так как вы можете работать с объектом отдела напрямую и не создавать группы объектов SqlParameter.
источник
Вы используете,
MapToStoredProcedures()
что означает, что вы отображаете свои сущности на хранимые процедуры, при этом вам нужно отказаться от того факта, что есть хранимая процедура, и использовать ееcontext
как обычно. Как то так ( записано в браузере, поэтому не проверено )Если все, что вы действительно пытаетесь сделать, это вызвать хранимую процедуру напрямую, используйте
SqlQuery
источник
.MapToStoredProcedures(s =>
. ПризывAdd
должен разрешить.Insert(i => i.HasName("insert_department")
Теперь вы также можете использовать созданное мной соглашение, которое позволяет вызывать хранимые процедуры (включая хранимые процедуры, возвращающие несколько результирующих наборов), TVF и скалярные UDF изначально из EF.
Читать далее
Подробнее .
источник
источник
Это работает для меня путем извлечения данных из хранимой процедуры при передаче параметра.
_db
такое dbContextисточник
Посмотрите на эту ссылку, которая показывает, как работает сопоставление EF 6 с хранимыми процедурами для вставки, обновления и удаления: http://msdn.microsoft.com/en-us/data/dn468673
прибавление
Вот отличный пример вызова хранимой процедуры из Code First:
Допустим, вам нужно выполнить хранимую процедуру с одним параметром, и эта хранимая процедура возвращает набор данных, которые соответствуют состояниям сущностей, поэтому мы получим следующее:
Теперь допустим, что мы хотим выполнить еще одну хранимую процедуру с двумя параметрами:
Обратите внимание, что мы используем индексирование имен для параметров. Это связано с тем, что Entity Framework обернет эти параметры как объекты DbParameter, чтобы избежать проблем с внедрением SQL.
Надеюсь, этот пример поможет!
источник
источник
Это работает для меня в коде в первую очередь. Возвращает список с соответствующим свойством модели представления (StudentChapterCompletionViewModel)
Обновлено для контекста
Контекст является экземпляром класса, который наследует DbContext, как показано ниже.
источник
У бездарного пассажира есть проект, который позволяет возвращать множество наборов результатов из сохраненного процесса с использованием структуры сущностей. Один из его примеров ниже ....
источник
Вы можете передавать параметры
sp_GetById
и получать результаты вToList()
илиFirstOrDefault();
источник
если вы хотите передать параметры таблицы в хранимую процедуру, вы должны установить свойство TypeName для параметров таблицы.
источник
Вот что EF (сначала DB) генерирует в классе DbContext:
источник
Когда EDMX создаст это время, если вы выберете опцию хранимой процедуры в таблице, выберите вызов процедуры, используя имя процедуры ...
источник
Я обнаружил, что вызов хранимых процедур в подходе Code First не удобен. Я предпочитаю использовать
Dapper
вместоСледующий код был написан с
Entity Framework
:Следующий код был написан с
Dapper
:Я считаю, что второй кусок кода проще для понимания.
источник
источник
Ничего не нужно делать ... когда вы создаете dbcontext для кода, сначала подходите, инициализируйте пространство имен под свободной областью API, создайте список sp и используйте его в другом месте, где вам нужно.
}
источник
Использование MySql и Entity Framework Code Первый подход:
источник
Создайте процедуру в MYsql.
Создать класс, содержащий хранимую процедуру, возвращающую значения набора результатов
Добавить класс в Dbcontext
Вызов сущности в хранилище
источник