Как запустить хранимую процедуру в ADO.NET Entity Framework? - PullRequest
1 голос
/ 14 июня 2009

Как использовать хранимую процедуру в ADO.NET Entity Framework?

Мой стол: MyCustomer

Columns:
CustomerID    PK   int 
Name               nvarchar(50)
SurName            nvarchar(50)

Моя хранимая процедура

ALTER procedure [dbo].[proc_MyCustomerAdd]
(@Name nvarchar(50),
@SurName nvarchar(50)
)
as 
begin
  insert into dbo.MyCustomer([Name], SurName) values(@name,@surname)
end

Мой код C #

private void btnSave_Click(object sender, EventArgs e)
{
   entityContext.MyCustomerAdd(textName.Text.Trim(), textSurName.Text.Trim());
   entityContext.SaveChanges();
}

Ошибка:

Считыватель данных несовместим с указанным 'TestAdonetEntity2Model.MyCustomer. член типа 'CustomerID' делает нет соответствующего столбца в считыватель данных с тем же именем.

Ошибка произошла ниже последней строки кода (вызов ExecuteFunction):

global::System.Data.Objects.ObjectParameter surNameParameter;
if ((surName != null))
{
   surNameParameter = new global::System.Data.Objects.ObjectParameter("SurName", surName);
}
else
{
   surNameParameter = new global::System.Data.Objects.ObjectParameter("SurName", typeof(string));
}
<b>return base.ExecuteFunction<MyCustomer>("MyCustomerAdd", nameParameter, surNameParameter);</b>

Добавлено в порядке. Каждый добавленный процесс в порядке. Но после редактирования возникает вышеуказанная ошибка.

Ответы [ 4 ]

2 голосов
/ 04 января 2012

Я думаю, что вам нужно сделать импорт функции с помощью инструмента EF и вызвать импортированную функцию, например

DataContext.MyFunctionName(storedProcedureParamer1, storedProcedureParamer2)

Как импортировать хранимую процедуру

0 голосов
/ 17 августа 2017

Для вызова хранимых процедур для операций запроса вы можете использовать SqlQuery в Entityframework, что очень полезно

_dbContext.Database.SqlQuery<EntityType>("sp_name",parameters).ToList();

Для Операций Executenonquery (Транзакций) вы можете использовать

_dbContext.Database.ExecuteSqlCommand( 
                    @"UPDATE tblname SET Rating = 5" + 
                        " WHERE Name LIKE '%Entity Framework%'" 
                    );

Обратите внимание, что объект _dbContext вашего класса Context наследуется от класса Entityframework DbContext

0 голосов
/ 14 июня 2009
try
{
    entityContext.MyCustomerAdd(textName.Text.Trim(), textSurName.Text.Trim())
}
catch (Exception ex)
{
    ;
}

Добавлен Процесс работает правильно. С другой стороны ; после добавленного процесса, приведите выше ошибку. Но мое решение работает правильно !!!

0 голосов
/ 14 июня 2009

Просто дикое предположение (я не использовал EF с сохраненными процессами): не должно ли имя функции, используемой в "ExecuteFunction", совпадать с именем сохраненного процесса ??

return base.ExecuteFunction("MyCustomerAdd", nameParameter, surNameParameter);

ALTER procedure [dbo].[proc_MyCustomerAdd]

Можете ли вы попробовать:

return base.ExecuteFunction("proc_MyCustomerAdd", nameParameter, surNameParameter);

Имеет ли это какое-то значение?

Марк

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...