当前位置: 首页 > news >正文

二级域名网站权重网站如何推广运营

二级域名网站权重,网站如何推广运营,seo的概念是什么,美食烹饪网站策划书目录 EFCore执行非查询原生SQL语句 为什么要写原生SQL语句 执行非查询SQL语句 有SQL注入漏洞 ExecuteSqlInterpolatedAsync 其他方法 执行实体相关查询原生SQL语句 FromSqlInterpolated 局限性 执行任意原生SQL查询语句 什么时候用ADO.NET 执行任意SQL Dapper 总…

目录

EFCore执行非查询原生SQL语句

为什么要写原生SQL语句

执行非查询SQL语句

有SQL注入漏洞

ExecuteSqlInterpolatedAsync 

其他方法

执行实体相关查询原生SQL语句

FromSqlInterpolated

局限性

执行任意原生SQL查询语句

什么时候用ADO.NET

执行任意SQL

Dapper

总结


EFCore执行非查询原生SQL语句

为什么要写原生SQL语句

  1. 尽管EF Core已经非常强大,但是仍然存在着无法被写成标准EF Core调用方法的SQL语句,少数情况下仍然需要写原生SQL。
  2. 可能无法跨数据库。
  3. 三种情况:非查询语句、实体查询、任意SQL查询。

执行非查询SQL语句

使用dbCtx.Database. ExecuteSqlInterpolated ();

dbCtx.Database. ExecuteSqlInterpolatedAsync()方法来执行原生的非查询SQL语句。

static async Task Main(string[] args)
{using (MyDbContext ctx = new MyDbContext()){string strName = "小刘";await ctx.Database.ExecuteSqlInterpolatedAsync(@$"insert into T_Books(Name,Author,Price)select Name,{strName},Pricefrom T_Books where Price > 20");}
}

有SQL注入漏洞

字符串内插的方式会不会有SQL注入攻击漏洞吗?查看一下执行的SQL语句吧。

insert into T_Books(Name,Author,Price)
select Name,@p0,Price
from T_Books where Price > 20
ExecuteSqlInterpolatedAsync 

字符串内插如果赋值给string变量,就是字符串拼接;字符串内插如果赋值给FormattableString变量,编译器就会构造FormattableString 对象。打印FormattableString的成员试试看。

static async Task Main(string[] args)
{using (MyDbContext ctx = new MyDbContext()){string strName = "小刘";FormattableString sql = (@$"insert into T_Books(Name,Author,Price)select Name,{strName},Pricefrom T_Books where Price > 20");Console.WriteLine("Format:" + sql.Format);Console.WriteLine("参数:" + string.Join(",", sql.GetArguments()));}
}

ExecuteSqlInterpolatedAsync()的参数是FormattableString类型。因此ExecuteSqlInterpolatedAsync会进行参数化SQL的处理。

其他方法

除了ExecuteSqlInterpolated ()、ExecuteSqlInterpolatedAsync() ,还有ExecuteSqlRaw()、ExecuteSqlRawAsync() 也可以执行原生SQL语句,但需要开发人员自己处理查询参数,因此不推荐使用。

执行实体相关查询原生SQL语句

FromSqlInterpolated

如果要执行的原生SQL是一个查询语句,并且查询的结果也能对应一个实体,就可以调用对应实体的DbSet的FromSqlInterpolated()方法来执行一个查询SQL语句,同样使用字符串内插来传递参数。

static async Task Main(string[] args)
{using (MyDbContext ctx = new MyDbContext()){string NamePattern = "%计算%";var queryable = ctx.Books.FromSqlInterpolated(@$"select * from T_Books where Name Like {NamePattern} order by newid()");foreach (var item in queryable){Console.WriteLine(item.Id + item.Name);}}
}
select * from T_Books where Name Like @p0 order by newid()

FromSqlInterpolated()方法的返回值是IQueryable类型的,因此我们可以在实际执行IQueryable之前,对IQueryable进行进一步的处理。

把只能用原生SQL语句写的逻辑用FromSqlInterpolated()去执行,然后把分页、分组、二次过滤、排序、Include等其他逻辑尽可能仍然使用EF Core的标准操作去实现。

局限性

  1. SQL 查询必须返回实体类型对应数据库表的所有列;
  2. 结果集中的列名必须与属性映射到的列名称匹配。
  3. 只能单表查询,不能使用Join语句进行关联查询。但是可以在查询后面使用Include()来进行关联数据的获取。

执行任意原生SQL查询语句

什么时候用ADO.NET

FromSqlInterpolated()只能单表查询,但是在实现报表查询等的时候,SQL语句通常是非常复杂的,不仅要多表Join,而且返回的查询结果一般也都不会和一个实体类完整对应。因此需要一种执行任意SQL查询语句的机制。

EF Core中允许把视图或存储过程映射为实体,因此可以把复杂的查询语句写成视图或存储过程,然后再声明对应的实体类,并且在DbContext中配置对应的DbSet。

不推荐写存储过程;项目复杂查询很多,导致:视图太多;非实体的DbSet;DbSet膨胀。

执行任意SQL

dbCxt.Database.GetDbConnection()获得ADO.NET Core的数据库连接对象。

Dapper

推荐用Dapper等框架执行原生复杂查询SQL。

EF Core和Dapper并不是对立,可以同时使用,EF Core简单方便

var items = ctx.Database.GetDbConnection().Query<GroupArticleByPrice>("select Price,Count(*) PCount from T_Books group by price");
foreach (var item in items)
{Console.WriteLine($"Price{item.Price},Count{item.PCount}");
}

总结

一般Linq操作就够了,尽量不用写原生SQL;

  1. 非查询SQL用ExecuteSqlInterpolated () ;
  2. 针对实体的SQL查询用FromSqlInterpolated()。
  3. 复杂SQL查询用ADO.NET的方式或者Dapper等。
http://www.wooajung.com/news/27234.html

相关文章:

  • 商城网站建设服务器海南百度推广开户
  • 网站的做用重庆企业免费建站
  • b站推广网站nba智库seo是什么意思seo是什么职位
  • 我的三次做网站的经历近期国际新闻20条
  • 随州网站建设优化推广渠道百度推广服务费一年多少钱
  • 做职业测试的网站农产品网络营销推广方案
  • 响应式做的好的网站有哪些玉林网站seo
  • 网站空间优惠发帖推广平台
  • 俄语网站建设google官网入口下载
  • 记事本做网站怎么加背景图公司怎么推广网络营销
  • 有什么较好的网站开发框架友链交易平台
  • ubuntu wordpress端口seo优化个人博客
  • 网站sitemap制作兰州seo优化
  • 网站要背代码?深圳搜索排名优化
  • 做网站的视频宁波seo网络推广推荐
  • 北京网站优化策略seo综合查询站长工具关键词
  • 河南网站设计公司价格公司关键词排名优化
  • 工商网站查询企业信息查询官网灰色词网站seo
  • 深圳专业网站建设产品运营之中的广度讲解深圳网络营销的公司哪家好
  • 怎么做网站推广百度快照不更新怎么办
  • 昆明做网站建设公司淘宝网店运营
  • 龙口有没有做网站的产品推广策略怎么写
  • 做网站公司需要多少钱如何免费做网站网页
  • 中山制作企业网站新站整站快速排名
  • 动漫设计与制作代码seo裤子的关键词首页排名有哪些
  • 哈尔滨百度网站建设长春百度推广公司
  • 最便宜网站空间百度推广登录首页
  • 深圳网站建设 公司元代运营公司怎么找客户
  • 公司网站建设模块简介seo优化排名经验
  • 招聘网站免费平台响应式模版移动优化