让我们高兴的是EF终于支持了写原生sql语句,有时候我们为了方便和性能会直接写sql语名。本文就来总结一下Entity Framework中怎么写原生sql语句,怎么通过sql语句来查询数据,修改数据。
一、EF写原生的sql语句返回实体
DbSet的SqlQuery方法可以传入原生的sql语句来返回实体,如果返回的实体对象是通过linq的方式,那么这些对象将会被EF的contex跟踪tracked。
using (var context = new BloggingContext())
{
var blogs = context.Blogs.SqlQuery("SELECT * FROM dbo.Blogs").ToList();
}
注意:和Linq一样,上面的查询直到使用这个返回集合时才真正执行(集合被枚举或者调用ToXXX()时)。上面就调用ToList(),所以查询也会立即执行。
二、EF使用存储过程返回实体
SqlQuery方法还可以传入一个存储过程:
using (var context = new BloggingContext())
{
var blogs = context.Blogs.SqlQuery("dbo.GetBlogs").ToList();
}
下面我们来看看有参数的存储过程:
using (var context = new BloggingContext())
{
var blogId = 1;
var blogs = context.Blogs.SqlQuery(