dotnetcore EF 非原生sql调用
2022/2/2 2:30:38
本文主要是介绍dotnetcore EF 非原生sql调用,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
尽量使用EF的异步调用
await ctx.Students.ToListAsync()
await foreach (var s in ctx.Students.AsAsyncEnumerable())
FormattableString使用
int a = 111; string world = "www"; FormattableString s = @$"hello {world}, {a}"; Console.WriteLine(s.Format); Console.WriteLine(string.Join(",", s.GetArguments()));
可以看到FormattableString并没有把所有的参数直接放入string中。
使用ExecuteSqlInterpolated实现更新操作
所以这样使用ExecuteSqlInterpolated(),不会导致sql注入攻击。
但是ExecuteSqlRaw()由于使用string参数,有可能导致sql注入攻击。
using (MyDbContext ctx = new MyDbContext()) { string name = "student_111"; ctx.Database.ExecuteSqlInterpolated(@$" insert into student(name) values ({name}) "); }
使用FromSqlInterpolated实现读取操作,并配合skip/take/include等使用
** 但是需要注意FromSqlInterpolated不支持Join操作。**
using (MyDbContext ctx = new MyDbContext()) { string pattern = "%3%"; IQueryable<Student> students = ctx.Students.FromSqlInterpolated(@$" select * from student where name like {pattern} "); students.Skip(2).Take(5).ToArray(); }
对于EF不能控制的SQL语句,可以直接使用ado.net core
var conn = ctx.database.getdbconnection() using (var cmd = conn.CreateCommand()) { cmd.CommandText = "select price, count(*) from article group by price"; using (var reader = await cmd.ExecuteReaderAsync()) { while (await reader.ReadAsync()) { } } }
或者使用dapper
dapper会把结果反射到GroupArticleByPrice对象。
ctx.Database.GetDbConnection().Query<GroupArticleByPrice>("")
这篇关于dotnetcore EF 非原生sql调用的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2022-03-01沐雪多租宝商城源码从.NetCore3.1升级到.Net6的步骤
- 2024-12-06使用Microsoft.Extensions.AI在.NET中生成嵌入向量
- 2024-11-18微软研究:RAG系统的四个层次提升理解与回答能力
- 2024-11-15C#中怎么从PEM格式的证书中提取公钥?-icode9专业技术文章分享
- 2024-11-14云架构设计——如何用diagrams.net绘制专业的AWS架构图?
- 2024-05-08首个适配Visual Studio平台的国产智能编程助手CodeGeeX正式上线!C#程序员必备效率神器!
- 2024-03-30C#设计模式之十六迭代器模式(Iterator Pattern)【行为型】
- 2024-03-29c# datetime tryparse
- 2024-02-21list find index c#
- 2024-01-24convert toint32 c#