Хранимые функции в 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>
Добавим хранимую функцию (тип "Табличная функция"):

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
Не забываем нажать "Обновить" на пункте "Функции":

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

Основной код:
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.
На связи был Алексей Гулынин, оставляйте свои комментарии, увидимся в следующих статьях.




