2016-12-25 6 views
0

Пожалуйста, обратите внимание этот код - я создал хранимую процедуру:Вызов хранимой процедуры из Entity Framework 6.1.3-код первой

CREATE PROCEDURE InsertRegion 
    @RegionID int, 
    @RegionDesc nvarchar(50) 
AS 
BEGIN 
    INSERT INTO [dbo].[Region] 
    VALUES (@RegionID, @RegionDesc) 
END 

, и я хочу, чтобы вызвать эту процедуру из моего репозитория класса:

using (Model1 ent = new Models.Model1()) 
{ 
    List<SqlParameter> parameters = new List<SqlParameter>(); 
    parameters.Add(new SqlParameter("RegionID", 100)); 
    parameters.Add(new SqlParameter("RegionDesc", "Nima")); 

    ent.Database.SqlQuery<Region>("exec InsertRegion", parameters.ToArray()); 
    } 

, но ничего не происходит. Я меняю последнюю строку на:

ent.Database.SqlQuery<Region>("exec InsertRegion @RegionID, @RegionDesc ", parameters.ToArray()); 

но опять же ничего не происходит.

Где проблема?

Благодаря

+0

Вы не получите какую-либо ошибку? Что произойдет, если вы попытаетесь выполнить процедуру непосредственно против БД с помощью SQL Management Studio? –

+0

он проходит до конца метода без каких-либо ошибок и ничего не происходит. Когда я исполняю sp, запись будет вставляться в таблицу – Arian

+0

. Вы можете попробовать отладить и просмотреть сгенерированный SQL (http://stackoverflow.com/a/20751723/2804621). Или вы можете запустить профилировщик SQL, чтобы узнать, сделан ли вызов в БД. –

ответ

1

Использование без exec:

using (Model1 ent = new Models.Model1()) 
{ 
    var regionID= new SqlParameter("@RegionID", 100); 
    var regionDesc= new SqlParameter("@RegionDesc", "Nima"); 

    ent.Database.SqlQuery<Region>("InsertRegion @RegionID ,@RegionDesc", regionID ,regionDesc); 
} 

, но в вашем зр не возвращает recored, так что вы можете использовать это также:

using (Model1 ent = new Models.Model1()) 
{ 
    var regionID= new SqlParameter("@RegionID", 100); 
    var regionDesc= new SqlParameter("@RegionDesc", "Nima"); 

    ent.Database.ExecuteSqlCommand("InsertRegion @RegionID ,@RegionDesc", regionID ,regionDesc); 
} 
+0

Поскольку этот вызов действительно ** не ** возвращает любые данные (без набора результатов), использование '.SqlQuery ' на самом деле не имеет большого смысла здесь ... –

+0

@marc_s Yse, вы правы, ответ обновлен. – Iraj

Смежные вопросы