Хранимые процедуры в Entity Framework

Хранимые процедуры в 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>

Добавим хранимую процедуру:

Хранимые процедуры в Entity Framework

CREATE PROCEDURE [dbo].[GetCapitalByCountry]
    @name nvarchar(20) 
AS
    SELECT * FROM Capitals
    WHERE Capitals.CountryID=(SELECT Id FROM Countries WHERE Name=@name)

Нажимаем "Обновить":

Хранимые процедуры в Entity Framework

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

Хранимые процедуры в Entity Framework

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

Хранимые процедуры в Entity Framework

Основной код:

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.

На связи был Алексей Гулынин, оставляйте свои комментарии, увидимся в следующих статьях.


Комментарии:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *