在Entity Framework中,您可以使用LINQ查询实体类.您还可以使用DbCOntext直接使用原始SQL对数据库运行查询.这些技术可以同样应用于使用Code First和EF Designer创建的模型.
对现有实体的SQL查询
DbSet上的SqlQuery方法允许要写入的原始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查询
可以使用Database类上的SqlQuery方法创建返回任何类型实例(包括基本类型)的SQL查询.例如 :
class Program { static void Main(string[] args) { using (var context = new UniContextEntities()) { var studentNames = context.Database.SqlQuery("SELECT FirstMidName FROM dbo.Student").ToList(); foreach (var student in studentNames) { Console.WriteLine("Name: {0}", student); } Console.ReadKey(); } }}
数据库的SQL命令
ExecuteSqlCommnad method用于向数据库发送非查询命令,例如Insert,Update或Delete命令.让我们来看看以下代码,其中学生的名字更新为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(); } }}
以上代码将从数据库中检索所有学生的名字.