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++
.NET Core 使用 EF 出错的解决方法
.NET Core 使用 EF 出错的解决方法
474 0
.NET Core 使用 EF 出错的解决方法
|
3月前
|
数据库
分享一个 .NET EF 6 扩展 Where 的方法
分享一个 .NET EF 6 扩展 Where 的方法
|
5月前
|
开发框架 .NET 数据库
【Entity Framework】EF中SaveChanges如何使用
【Entity Framework】EF中SaveChanges如何使用
49 0
|
关系型数据库 MySQL 数据库
EF Core反向工程
EF Core反向工程,数据库创建表使用命令生成上下文
98 0
|
SQL 存储 数据处理
5.1EF Core原理
对普通集合使用where等方法查询出来的返回值为IEnumerable类型 但是对DbSet使用用where等方法出查询出来的返回值为IQueryable类型
|
关系型数据库 MySQL Linux
.Net Core 的WebApi项目使用mysql的EF CodeFirst模式
.Net Core 的WebApi项目使用mysql的EF CodeFirst模式
231 0
.Net Core 的WebApi项目使用mysql的EF CodeFirst模式
|
开发框架 算法 .NET
4.1EF Core
EF Core是微软官方的ORM框架,ORM即对象关系映射,也就是我们可以直接操作C#中的对象就可以完成数据库的操作。
|
开发框架 .NET 数据库连接
7.3EF Core与ASP.NET Core集成
7.3EF Core与ASP.NET Core集成
|
API 数据库 索引
4.2EF Core的实体类配置
本文主要讨论实体类和数据表是如何映射的,以及实体类中的属性是如何与数据表中的列映射的
|
关系型数据库 MySQL 编译器
在 EF Core 7 中实现强类型 ID
本文主要介绍 DDD 中的强类型 ID 的概念,及其在 EF 7 中的实现,以及使用 LessCode.EFCore.StronglyTypedId 这种更简易的上手方式。
243 0
在 EF Core 7 中实现强类型 ID