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