В Entity Framework вы можете делать запросы с вашими классами сущностей, используя LINQ. Вы также можете запускать запросы, используя сырой SQL напрямую к базе данных, используя DbCOntext. Методы могут применяться в равной степени к моделям, созданным с помощью Code First и EF Designer.
SQL-запрос на существующую сущность
Метод SqlQuery в DbSet позволяет писать необработанный SQL-запрос, который будет возвращать экземпляры сущностей. Возвращенные объекты будут отслеживаться контекстом так же, как если бы они были возвращены запросом LINQ. Например —
class Program { static void Main(string[] args) { using (var context = new UniContextEntities()) { var students = context.Students.SqlQuery("SELECT * FROM dbo.Student").ToList(); foreach (var student in students) { string name = student.FirstMidName + " " + student.LastName; Console.WriteLine("ID: {0}, Name: {1}, \tEnrollment Date {2} ", student.ID, name, student.EnrollmentDate.ToString()); } Console.ReadKey(); } } }
Приведенный выше код извлечет всех студентов из базы данных.
SQL-запрос для не-сущностных типов
SQL-запрос, возвращающий экземпляры любого типа, включая примитивные, может быть создан с помощью метода SqlQuery в классе Database. Например —
class Program { static void Main(string[] args) { using (var context = new UniContextEntities()) { var studentNames = context.Database.SqlQuery <string>("SELECT FirstMidName FROM dbo.Student").ToList(); foreach (var student in studentNames) { Console.WriteLine("Name: {0}", student); } Console.ReadKey(); } } }
Команды SQL для базы данных
Метод ExecuteSqlCommnad используется при отправке в базу данных незапрошенных команд, таких как команда «Вставить», «Обновить» или «Удалить». Давайте посмотрим на следующий код, в котором имя студента обновляется как ID = 1
class Program { static void Main(string[] args) { using (var context = new UniContextEntities()) { //Update command int noOfRowUpdated = context.Database.ExecuteSqlCommand("Update student set FirstMidName = 'Ali' where ID = 1"); context.SaveChanges(); var student = context.Students.SqlQuery("SELECT * FROM dbo.Student where ID = 1").Single(); string name = student.FirstMidName + " " + student.LastName; Console.WriteLine("ID: {0}, Name: {1}, \tEnrollment Date {2} ", student.ID, name, student.EnrollmentDate.ToString()); Console.ReadKey(); } } }
Приведенный выше код извлекает все имена учеников из базы данных.