Учебники

LINQ — Сущности

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

LINQ - Сущности

Пример ADD, UPDATE и DELETE с использованием LINQ с Entity Model

Сначала добавьте Entity Model, выполнив следующие шаги.

Шаг 1 — Щелкните правой кнопкой мыши на проекте и нажмите кнопку Добавить новый элемент, откроется окно, как показано ниже. Выберите ADO.NET Entity Data Model, укажите имя и нажмите «Добавить».

LINQ - Entity Model

Шаг 2 — Выберите Создать из базы данных.

LINQ - Entity Model

Шаг 3 — Выберите соединение с базой данных из выпадающего меню.

LINQ - Entity Model

Шаг 4 — Выберите все таблицы.

LINQ - Entity Model

Теперь напишите следующий код.

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();
      }
   }
}

Когда приведенный выше код компилируется и выполняется, он дает следующий результат —