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