EFCore执行Sql语句的方法:FromSql与ExecuteSqlCommand
2017-03-15 10:57
736 查看
前言
在EFCore中执行Sql语句的方法为:FromSql与ExecuteSqlCommand;在EF6中的为SqlQuery与ExecuteSqlCommand,而FromSql和SqlQuery有很大区别,FromSql返回值为IQueryable,因此为延迟加载的,可以与Linq扩展方法配合使用,但是有不少的坑(EFCore版本为1.1.0),直接执行Sql语句的建议不要使用FromSql,但是EFCore中并没有提供SqlQuery方法,因此下面会贴出SqlQuery的实现代码供大家参考,以便在EFCore中能使用。FromSql和ExecuteSqlCommand的使用
测试时使用了SqlServer2008和SqlServer Profiler进行Sql语句捕捉,EFCore的版本为1.1.0。测试的Entity Model与DbContext
View CodeExecuteSqlCommand
EFCore的ExecuteSqlCommand和EF6的一样,执行非查询的Sql语句:View Code
inner join + order by
1 var db = new MSSqlDBContext(); 2 (from p in db.Set<Person>().FromSql($"select * from {nameof(Person)} ") 3 join a in db.Set<Address>().Where(l => true) 4 on p.addrid equals a.id 5 select new { p.id, p.name, a.fullAddress }).OrderBy(l => l.id).ToList();
生成的Sql:
View Code
left join + order by
View Code使用:
1 var db = new MSSqlDBContext(); 2 string name = "tom"; 3 var list = SqlQuery<PAModel>(db, 4 $" select p.id, p.name, a.fullAddress, a.lat, a.lon " + 5 $" from ( select * from {nameof(Person)} where {nameof(name)}=@{nameof(name)} ) as p " + 6 $" left join {nameof(Address)} as a on p.addrid = a.id ", 7 new[] { new SqlParameter(nameof(name), name) });
生成的Sql:
exec sp_executesql N' select p.id, p.name, a.fullAddress, a.lat, a.lon from ( select * from Person where name=@name ) as p left join Address as a on p.addrid = a.id ',N'@name nvarchar(3)',@name=N'tom'
相关文章推荐
- EFCore执行Sql语句的方法:FromSql与ExecuteSqlCommand
- EFCore执行Sql语句的方法:FromSql与ExecuteSqlCommand
- EFCore执行Sql语句的方法:FromSql与ExecuteSqlCommand
- JDBCTM中Statement接口提供的execute、executeQuery和executeUpdate之间的区别 Statement 接口提供了三种执行 SQL 语句的方法:
- 使用PreparedStatement的execute方法执行sql插入语句,执行成功,但是返回结果却为false
- EF5中 执行 sql语句使用Database.ExecuteSqlCommand 返回影响的行数 ; EF5执行sql查询语句 Database.SqlQuery 带返回值
- Java 使用execute方法执行Sql语句
- 使用JdbcTemplate的execute()方法执行SQL语句
- 不带参数的SQL语句执行方法
- 批量执行sql语句的方法
- JSP 多条SQL语句同时执行的方法
- informix数据库执行sql语句方法
- C#(.net)中的一次连接数据库执行多条sql语句(两种方法)
- 得出SQL语句的执行时间的方法
- 执行动态生成的SQL语句的方法
- SQL语句书可以提高执行效率的5种需要注意的书写方法
- SqlCommand.ExecuteScalar 方法
- JSP 多条SQL语句同时执行的方法
- 借用.net framework的string.Fromat(...),实现一个执行参数化SQL的方法
- 得出SQL语句的执行时间的方法