2013-05-30 75 views
6

我正在使用实体框架5的asp.net mvc 3.我的.edmx文件&能够使用linq或SP与我的数据库交互,但我想运行一些原始的sql语句。我正在尝试这样的事情:如何在实体框架中执行原始sql查询?

Using(var ctx=new HREntities()) 
{ 
    ctx.Database.ExecuteSqlCommand("insert into Employees values {0}, {1}", model.EMPLOYEEID, model.EMPLOYEENAME); 
    ctx.SaveChanges(); 
} 

是否有可能以这种方式执行sql查询?谢谢。

+0

http://stackoverflow.com/questions/915329/is-it-possible-to-run-native-sql-with-entity-framework – Satpal

+0

你也可以看看我的答案http://stackoverflow.com/questions/16807334/execute-raw-sql-query-in-asp-net-mvc-database-first-mode/29147592#29147592 [1]:http://stackoverflow.com/questions/16807334/execute-raw-sql-query-in-asp-net-mvc-database-first-mode/29147592#29147592 –

回答

10

您可以执行查询的以下几种类型:

  1. 的实体类型的SQL查询返回特定类型的实体。

    using (var ctx = new SchoolDBEntities()) 
    { 
    
        var studentList = ctx.Students.SqlQuery("Select * from Student").ToList<Student>(); 
    
    } 
    
  2. 针对返回原始数据类型的非实体类型的SQL查询。

    using (var ctx = new SchoolDBEntities()) 
    { 
    
    var studentName = ctx.Students.SqlQuery("Select studentid, studentname 
        from Student where studentname='New Student1'").ToList(); 
    } 
    
    
    //Error 
    using (var ctx = new SchoolDBEntities()) 
    {     
        //this will throw an exception 
        var studentName = ctx.Students.SqlQuery("Select studentid as id, studentname as name 
         from Student where studentname='New Student1'").ToList(); 
    } 
    
    //SQL query for non-entity types: 
        using (var ctx = new SchoolDBEntities()) 
        { 
         //Get student name of string type 
         string studentName = ctx.Database.SqlQuery<string>("Select studentname 
        from Student where studentid=1").FirstOrDefault<string>(); 
        } 
    
  3. 原始SQL命令到数据库。

     using (var ctx = new SchoolDBEntities()) 
         { 
    
          //Update command 
          int noOfRowUpdated = ctx.Database.ExecuteSqlCommand("Update student 
         set studentname ='changed student by command' where studentid=1"); 
          //Insert command 
         int noOfRowInserted = ctx.Database.ExecuteSqlCommand("insert into student(studentname) 
         values('New Student')"); 
         //Delete command 
         int noOfRowDeleted = ctx.Database.ExecuteSqlCommand("delete from student 
         where studentid=1"); 
    
         } 
    

您也可以参考this

5

这已经奏效了!

using (var ctx = new HR()) 
     { 

      ctx.Database.ExecuteSqlCommand("insert into Employees values (9, 'Beverage')"); 

      ctx.SaveChanges(); 
     }