Хранимые процедуры в Entity Framework
Всем доброго времени суток. На связи Алексей Гулынин. Продолжаем работать с Entity Framework. В данной статье я бы хотел рассказать про работу с хранимыми процедурами в Entity Framework. Для начала опишем наши классы. Далее создадим хранимую процедуру и из кода вызовем её. Хранимая процедура будет по названию страны возвращать её столицу.
Создадим класс "Country":
class Country
{
// id страны
public int Id { get; set; }
// Название страны
public string Name { get; set; }
}
Класс "Capital":
class Capital
{
// id столицы
public int Id { get; set; }
// название столицы
public string Name { get; set; }
// id страны
public int CountryID { get; set; }
}
Класс "MyEFDB" будет иметь следующий вид:
using System.Data.Entity;
namespace TestProject
{
class MyEFDB: DbContext
{
public MyEFDB(): base("name=MyEFDB")
{ }
public virtual DbSet<Country> Countries { get; set; }
public virtual DbSet<Capital> Capitals { get; set; }
}
}
Строка подключения:
<connectionStrings> <add name="MyEFDB" connectionString="data source=(LocalDb)\v11.0;initial catalog=MyEFDB;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework" providerName="System.Data.SqlClient" /> </connectionStrings>
Добавим хранимую процедуру:

CREATE PROCEDURE [dbo].[GetCapitalByCountry]
@name nvarchar(20)
AS
SELECT * FROM Capitals
WHERE Capitals.CountryID=(SELECT Id FROM Countries WHERE Name=@name)
Нажимаем "Обновить":

Далее нажимаем "Обновить" на пункте "Хранимые процедуры":

Добавим данные в таблицы, чтобы они выглядели следующим образом:

Основной код:
using System;
using System.Data.SqlClient;
namespace TestApp
{
class Program
{
static void Main(string[] args)
{
using (MyEFDB db = new MyEFDB())
{
// Создаём параметр
SqlParameter parameter = new SqlParameter("@param", "Spain");
// capital содержит результат выполнения хранимой процедуры
var capital = db.Database.SqlQuery<Capital>("GetCapitalByCountry @param", parameter);
foreach (var item in capital)
{
Console.WriteLine("Country: {0} | Capital: {1}", parameter.Value, item.Name);
}
}
Console.WriteLine("Нажмите клавишу для продолжения...");
Console.ReadLine();
}
}
}
В данной статье вы узнали, как работать с хранимыми процедурами в Entity Framework.
На связи был Алексей Гулынин, оставляйте свои комментарии, увидимся в следующих статьях.




