回答

收藏

如何在实体框架中实施原始SQL查询?

技术问答 技术问答 343 人阅读 | 0 人回复 | 2023-09-14

我用的是实体框架5asp.net
- U2 d2 P1 q- C4 y0 I4 nmvc3。我有.edmx并且可以使用文件linq或SP与数据库互动,但我想操作一些原始的sql句子。我正在尝试这样的事情:; u* o" d% n  b8 d% b& n
Using(var ctx=new HREntities(){  ctx.Database.ExecuteSqlCommand("insert into Employees values{0},{1}",  model.EMPLOYEEID,model.EMPLOYEENAME);  ctx.SaveChanges();}这样执行有可能吗?sql查询?, b' ~) V# m# p( X8 Y
                                                                0 b% K; {' Y) J1 O
    解决方案:                                                               
9 g5 J5 j! |! p                                                                您可以执行以下类型的查询:
% ~$ D9 c# x+ B- T) l- Y# b) h- T[ol]实体类型SQL查询,查询返回特定类型的实体。3 h, @8 w1 a; G
using (var ctx = new SchoolDBEntities()){; [. \: w; ^- |5 {
    var studentList = ctx.Students.SqlQuery("Select * from Student").ToList();}非实体类型SQL查询,查询返回原始数据类型。
- u3 y- |; K- `  ?using (var ctx = new  SchoolDBEntities()){' [5 t% M% d8 u% c+ ?6 C2 \
var studentName = ctx.Students.SqlQuery(“Select studentid,studentname
4 d7 D  ~7 w+ A                from Student where studentname=’New Student1’“).ToList();
: i8 e4 p8 B5 ]2 _. Y& k/ }+ r9 w}. U) ?) F) l% P" `4 U
//Error
0 O1 c+ e6 w- u1 l$ k/ @3 |5 l    using (var ctx = new SchoolDBEntities())! j( @) |+ \. J% j7 K, I& Z) I
    7 i; W3 H- R3 A* X
                    this will throw an exception
# Y. i) V, h; D- }& L- u                    var studentName = ctx.Students.SqlQuery(“Select studentid as id,studentname as name
' _2 t/ V( c0 q& D+ P: R# P                                from Student where studentname=’New Student1’“).ToList();  q. [. f% L$ m# O% j" I* k+ k
    }0 O- T( M" T* o5 t* d# ~  x6 H* y: v+ F
//SQL query for non-entity types:
; b) }3 _9 }; A7 f% }        using (var ctx = new SchoolDBEntities())8 k' q1 A4 `) I0 H# v2 o' @( \
        {9 {, j, r) W& S
                            Get student name of string type1 e8 g5 H" H, A
                        string studentName = ctx.Database.SqlQuery(“Select studentname
- `' _  F& c0 X) F. f                from Student where studentid=1”).FirstOrDefault();6 e9 x$ D7 i; T2 F. u1 I  r* f- C9 N, n
        }将原始SQL命令发送到数据库。. A9 \1 q; ?8 x2 A& }: N
                        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");   }[/ol]你也可以参考这个
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则