Являясь частью ADO.NET Entity Framework, LINQ to Entities более гибок, чем LINQ to SQL, но не очень популярен из-за своей сложности и отсутствия ключевых функций. Тем не менее, он не имеет ограничений LINQ to SQL, который позволяет запрашивать данные только в базе данных сервера SQL, поскольку LINQ to Entities облегчает запрос данных в большом количестве поставщиков данных, таких как Oracle, MySQL и т. Д.
Более того, он получил серьезную поддержку от ASP.Net в том смысле, что пользователи могут использовать элемент управления источником данных для выполнения запроса через LINQ to Entities и облегчают связывание результатов без необходимости дополнительного кодирования.
Благодаря этим преимуществам LINQ to Entities стал стандартным механизмом использования LINQ в базах данных. LINQ to Entities также позволяет легко изменять запрашиваемые данные и выполнять пакетное обновление. Что самое интересное в LINQ to Entities, это то, что он имеет тот же синтаксис, что и SQL, и даже имеет ту же группу стандартных операторов запросов, как Join, Select, OrderBy и т. Д.
LINQ to Entities Процесс создания и выполнения запросов
-
Создание экземпляра ObjectQuery из ObjectContext (Entity Connection)
-
Составление запроса в C # или Visual Basic (VB) с использованием недавно созданного экземпляра.
-
Преобразование стандартных операторов запросов LINQ, а также выражений LINQ в деревья команд
-
Выполнение запроса с передачей любых исключений, обнаруженных клиенту напрямую
-
Возврат клиенту всех результатов запроса
Создание экземпляра ObjectQuery из ObjectContext (Entity Connection)
Составление запроса в C # или Visual Basic (VB) с использованием недавно созданного экземпляра.
Преобразование стандартных операторов запросов LINQ, а также выражений LINQ в деревья команд
Выполнение запроса с передачей любых исключений, обнаруженных клиенту напрямую
Возврат клиенту всех результатов запроса
Здесь ObjectContext является основным классом, который обеспечивает взаимодействие с Entity Data Model или, другими словами, действует как мост, соединяющий LINQ с базой данных. Деревья команд являются здесь запросом представления с совместимостью с Entity Framework.
Entity Framework, с другой стороны, на самом деле является Object Relational Mapper, сокращенно обычно называемым ORM разработчиками, которые выполняют генерацию бизнес-объектов, а также сущностей в соответствии с таблицами базы данных и упрощают различные основные операции, такие как создание, обновление, удаление и чтение. , На следующем рисунке показана структура сущности и ее компоненты.
Пример ADD, UPDATE и DELETE с использованием LINQ с Entity Model
Сначала добавьте Entity Model, выполнив следующие шаги.
Шаг 1 — Щелкните правой кнопкой мыши на проекте и нажмите кнопку Добавить новый элемент, откроется окно, как показано ниже. Выберите ADO.NET Entity Data Model, укажите имя и нажмите «Добавить».
Шаг 2 — Выберите Создать из базы данных.
Шаг 3 — Выберите соединение с базой данных из выпадающего меню.
Шаг 4 — Выберите все таблицы.
Теперь напишите следующий код.
using DataAccess; using System; using System.Linq; namespace LINQTOSQLConsoleApp { public class LinqToEntityModel { static void Main(string[] args) { using (LinqToSQLDBEntities context = new LinqToSQLDBEntities()) { //Get the List of Departments from Database var departmentList = from d in context.Departments select d; foreach (var dept in departmentList) { Console.WriteLine("Department Id = {0} , Department Name = {1}", dept.DepartmentId, dept.Name); } //Add new Department DataAccess.Department department = new DataAccess.Department(); department.Name = "Support"; context.Departments.Add(department); context.SaveChanges(); Console.WriteLine("Department Name = Support is inserted in Database"); //Update existing Department DataAccess.Department updateDepartment = context.Departments.FirstOrDefault(d ⇒d.DepartmentId == 1); updateDepartment.Name = "Account updated"; context.SaveChanges(); Console.WriteLine("Department Name = Account is updated in Database"); //Delete existing Department DataAccess.Department deleteDepartment = context.Departments.FirstOrDefault(d ⇒d.DepartmentId == 3); context.Departments.Remove(deleteDepartment); context.SaveChanges(); Console.WriteLine("Department Name = Pre-Sales is deleted in Database"); //Get the Updated List of Departments from Database departmentList = from d in context.Departments select d; foreach (var dept in departmentList) { Console.WriteLine("Department Id = {0} , Department Name = {1}", dept.DepartmentId, dept.Name); } } Console.WriteLine("\nPress any key to continue."); Console.ReadKey(); } } }
Когда приведенный выше код компилируется и выполняется, он дает следующий результат —