Хранимые функции в Entity Framework

Хранимые функции в Entity Framework

Всем доброго времени суток. На связи Алексей Гулынин. Продолжаем работать с Entity Framework. В данной статье будем работать с хранимыми функциями в Entity Framework. Функция будет возвращать страны, численность населения которых больше определенного параметра.

Создадим класс "Country":

class Country
{
  // id страны
  public int Id { get; set; }
  // Название страны
  public string Name { get; set; }
  // Численность населения
  public long Population { get; set; }
}

Класс "MyEFDB" будет иметь следующий вид:

using System.Data.Entity;
 namespace TestProject
{
  class MyEFDB: DbContext
  {
    public MyEFDB(): base("name=MyEFDB")
    { }
    public virtual DbSet<Country> Countries { 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 FUNCTION [dbo].[GetPopulation]
(
  @population bigint
)
RETURNS @returntable TABLE
(
  [Id] int,
  [Name] nvarchar(50),
  [Population] bigint
)
AS
BEGIN
  INSERT @returntable
  SELECT * FROM Countries WHERE [Population] > @population
  RETURN
END

Не забываем нажать "Обновить" на пункте "Функции":

Хранимые функции в Entity Framework

Добавляем данные в таблицу:

Хранимые функции в Entity Framework

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

using System;
using System.Data.Entity;
using System.Data.SqlClient;

namespace TestApp
{
  class Program
  {
    static void Main(string[] args)
    {
      Database.SetInitializer(new DropCreateDatabaseIfModelChanges<MyEFDB>());
      using (MyEFDB db = new MyEFDB())
      {
        SqlParameter parameter = new SqlParameter("@population", 53000000);
        var countries = db.Database.SqlQuery<Country>("SELECT * FROM GetPopulation (@population)", parameter);
        foreach (var item in countries)
        {
          Console.WriteLine("{0} - {1}", item.Name, item.Population);
        }
      }
      Console.WriteLine("Нажмите клавишу для продолжения...");
      Console.ReadLine();
    }
  }
}

В данной статье вы узнали, как работать с хранимыми функциями в Entity Framework.

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


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

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

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