[c#] Получение данных из хранимой процедуры с помощью Entity Framework



Answers

Я уже сталкивался с этим с помощью хранимых процедур с использованием динамического SQL. У меня был успех с использованием сложных типов, если я добавлю строку «SET FMTONLY OFF»; (см. https://msdn.microsoft.com/en-us/library/ms173839.aspx ) до верхней части хранимой процедуры до ее добавления в модель EF. После того, как у вас установлена ​​ваша модель с вашим сложным типом, обязательно удалите эту строку.

Пример:

ALTER PROCEDURE dbo.SearchProducts
  @SearchTerm VARCHAR(max)
AS
BEGIN
  SET FMTONLY OFF;
  DECLARE @query VARCHAR(max)
  SET @query = 'SELECT * FROM dbo.Products WHERE Name LIKE ''%' + @SearchTerm + '%'''
  EXEC(@query)
END
Question

Я пытаюсь получить содержимое таблицы с динамической хранимой процедурой SQL, вызванной из объекта контекста базы данных (используя Entity Framework 6.1.1), чтобы заполнить элемент управления GridView . Я не могу получить данные.

Вот хранимая процедура. Это для студенческой демонстрации о внедрении SQL в хранимых процедурах, поэтому я ЗНАЮ, что это инъекция, и все в порядке.

ALTER PROCEDURE dbo.SearchProducts
  @SearchTerm VARCHAR(max)
AS
BEGIN
  DECLARE @query VARCHAR(max)
  SET @query = 'SELECT * FROM dbo.Products WHERE Name LIKE ''%' + @SearchTerm + '%'''
  EXEC(@query)
END

Код C #, который я использую для выполнения хранимой процедуры, следующий:

var db = new MyEntities();
var TEST_SEARCH_TERM = "product";
var result = db.SearchProducts(TEST_SEARCH_TERM);

MyGridView.DataSource = result;
MyGridView.DataBind();

При выполнении в Проводнике базы данных в Visual Studio хранимая процедура работает нормально. Но когда выполняется в запущенном приложении ASP.NET, я получаю исключение в методе DataBind() потому что result возвращает -1 вместо IEnumerable DataSet содержащий объекты, полученные из SELECT хранимой процедуры.

Как я могу получить данные и заполнить свой GridView ?




Вы, похоже, разобрали свою проблему, официальная документация от Microsoft доступна по ссылкам ниже:

Как импортировать хранимую процедуру в модель данных сущности: https://msdn.microsoft.com/en-us/library/vstudio/bb896231(v=vs.100).aspx

Сложные типы в дизайнере EF: https://msdn.microsoft.com/en-gb/data/jj680147.aspx

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




Related