EF Core-2

简介: 上篇 概念性讲述CRQS(https://www.cnblogs.com/ccaa/p/12545582.html)

带着问题去思考!大家好

上篇 概念性讲述CRQS(https://www.cnblogs.com/ccaa/p/12545582.html)

这篇我们主要讲在.NET CORE中的数据访问,数据访问我们常常会想到Entity Frameword Core。这是新面孔,是6.x的基础上专门设计的。

1:将其接来下的数据库访问类放到一个独立的类库中,独立起来。

2:获取连接字符串

publicclass MyOwnDatabase:DbContext {   public MyOwnDatabase(string connStringOrDbName="name=xxx"):base(connStringOrDbName)       {     } }

DbContext类通过参数接受连接字符串,从web.config文件中获取连接字符串,或者appsettings.json,或者自定义XML。

3:将EF上下文与ASP.NET Core DI集成

理想的作用域是每个请求,这意味着同一个HTTP请求内的所有调用方会共享同一个实例

publicvoid ConfigureServices(IServiceCollection services) {    var connString="..";    services.AddScoped<MyOwnDatabase>(()=>new MyOwnDatabase(connString)); }

直接注入控制器或存储库

publicclass SomeController:Controller {    privatereadonly MyOwnDatabase _context;    public SomeController(MyOwnDatabase  context)     {        _context=context;       }   }

上面的代码段是将一个DB上下文注入一个控制器来中,不建议这种用法,会使得控制器比较臃肿/

ADO.NET适配器

在ASP.NET Core2.0中。又引用了原来的ADO.NET API的一些组件。有DataTable独享,数据读取器和数据适配器。

1:发出SQL命令

var conn=new SqlConnection(); conn.ConnectionString="...";var cmd= new SqlCommand("SELECT * FROM customers",conn);

准备过后,通过一个打开的连接发出命令

conn.Open();var reader=cmd.ExecuteReader(CommandBehavior.CloseConnection); reader.Clone();

由于打开数据读取器的时候会请求关闭连接的行为,因此在关闭读取器时,连接将自动关闭,SqlCommand类的几个方法能够执行命令。

image.png

多种选项,可用来获取业务需要的执行SQL语句或存储过程的结果。遍历一个数据读取器的记录

var reader=cmd.ExecuteReader(CommandBehavior.CloseConnection);while(reader.Read()) {   var column0=reader[0];   var colum1=reader.GetString(1)  } reader.Clone();

2:将数据加载到已断开连接的容器

如果处理一个很长的响应,同时使占用的内存量最少,那么特别适用使用读取器,如果是其他情况,更好的方法是将查询结果加载到一个已断开连接的容器,如DataTable对象,

conn.Open();var reader=cmd.ExecuteReadr(CommandBehavior.CloseConnection);var table = new DataTable("Customers"); table.Colums.Add("FirstName"); table.Colums.Add("LastName"); table.Colums.Add("CountryCode"); table.Load(reader); reader.Close();

DataTable对象是具有架构,关系和逐渐的数据库表的内存版本。要填充一个DataTable对象,最简单的方法是获取一个数据读取游标,并加载声明的列表中的所有内容。映射是按照列索引进行的。Load方法背后的实际代码非常接近前面看到的循环,一般来说,可以采取的最安全的方法是使用Dispose模式,在C#using语句中创建数据库连接。

3:通过适配器获取数据

var conn=new SqlConnection(); conn.ConnectionString="...";var cmd=new SqlCommand("SELECT * FROM customers",conn);var table =new DataTable();var adapter=new SqlDataAdapter(cmd); adapter.Fill(table);

将数据加载到内存容器,最简洁的方式是使用数据适配器,数据适配器是一个汇总了整个查询过程的组件。

完整的O/RM和微型O/RM区别

重生产效率使用EF,存在大量的示例和功能,对命令进行内部优化。

微型O/RM占内存量小。功能少,缺少二级缓存和对关系的内置支持。

二级缓存指框架管理着额外的一层缓存,负责在配置的一定时间内持久化多个连接和事务的结果。EF不支持。EF Core有一个扩展项目。NHibernate支持。

二级缓存并不是区分主要的东西。主要是即对关系的支持

微型O/RM框架Dapper框架,NPoco框架,Insight.Database,PetaPoco

Dapper就性能而言,单个查询。Dapper比EF最多快10倍。

 

相关文章
|
C语言
设备树知识小全(六):设备节点及label的命名
设备树知识小全(六):设备节点及label的命名
607 0
java.lang.OutOfMemoryError: Metaspace
java.lang.OutOfMemoryError: Metaspace
182 0
量化交易系列【5】:如何快速的将日K线数据转换为周K线及月K线数据,神奇的resample函数
量化交易系列【5】:如何快速的将日K线数据转换为周K线及月K线数据,神奇的resample函数
量化交易系列【5】:如何快速的将日K线数据转换为周K线及月K线数据,神奇的resample函数
|
关系型数据库 MySQL Java
安装Ambari和HDP
安装Ambari和HDP
605 1
|
Web App开发 监控 前端开发
《吐血整理》保姆级系列教程-玩转Fiddler抓包教程(2)-初识Fiddler让你理性认识一下
【2月更文挑战第4天】《吐血整理》保姆级系列教程-玩转Fiddler抓包教程(2)-初识Fiddler让你理性认识一下 今天的理性认识主要就是讲解和分享Fiddler的一些理论基础知识。其实这部分也没有什么,主要是给小伙伴或者童鞋们讲一些实际工作中的场景,然后隆重推出我们的猪脚(主角)-Fiddler。在这个网络信息时代里,计算机安全始终是一个让人揪心的问题,网络安全则有过之而无不及。许多电脑高手 经常利用 Fiddler 可以作为代理的这个功能去抓取会话并进行修改达到自己想要的目的。Fiddler是一个强大并且跨平台的HTTP(S)抓包神器,你可别拿去做坏事。它的英文名叫:Fiddler,
274 2
|
前端开发 Java 关系型数据库
使用SSM实现农产品溯源系统保证食品安全
使用SSM实现农产品溯源系统保证食品安全
231 3
使用SSM实现农产品溯源系统保证食品安全
|
人工智能 BI
|
Java Maven
|
前端开发 算法 JavaScript
LeetCode两个数组的交集使用JavaScript解题|前端学算法
LeetCode两个数组的交集使用JavaScript解题|前端学算法
254 0
LeetCode两个数组的交集使用JavaScript解题|前端学算法
阿里云可观测 11 月功能快报&优惠快讯
阿里云可观测 11 月功能快报&优惠快讯
阿里云可观测 11 月功能快报&优惠快讯