EF Core框架数据库连接管理

1、SQL Server:SqlConnection、SqlCommand、SqlDataReader;

2、SQLite:SqliteConnection、SqliteCommand、SqliteDataReader;

3、PostgreSQL:NpgsqlConnection、NpgsqlCommand、NpgsqlDataReader;

其中,SQL Server 和 PostgreSQL 是有 DataAdapter 的,分别是 SqlDataAdapter 和 NpgsqlDataAdapter。SQLite 没有提供。

这样就保证了尽管面向不同的数据库,但 API 的调用过程差不多:

A、实例化 XXXConnection;

B、创建 XXXCommand 实例,设置 SQL 语句;

C、XXXCommand 实例调用 ExecuteXXX 执行 SQL,可能不需要返回结果,也可能需要 XXXDataReader 来读取结果;

D、关闭 XXXConnection 对象。

由于各种数据库相关的连接对象都是 DbConnection 的子类,于是,在连接管理上,只要统使用 DbConnection 类型就能把连接管理抽象出来,统一描述。为了实现这个“宏大目标”,EF Core 在面向关系数据库专用包(xxxx.Relational.dll)中提供了 IRelationalConnection 接口。这个接口完成了以下规范:

1、ConnectionString 属性:通过它,你可以设置 / 获取连接字符串;

2、DbConnection 属性:这个很重要,有了此属性,就可以设置 / 获取连接对象了,定义的类型正是公共基类 DbConnection;

3、Open / OpenAsync 方法:打开连接;

4、Close / CloseAsync 方法:关闭连接;

5、RentCommand 方法:调用它,它会自动帮你创建/重用一个命令实例,用 IRelationalCommand 接口封装了。这个接口稍后再介绍;

6、ReturnCommand 方法:命令对象使用完后,可以调用这个方法,把实例仍回去,以便将来可以重复/或全新使用。框架帮你管理其内存,不用你操心。

有小伙伴会疑惑:咦,我在 EFCore 源代码中搜索 SqlCommand、SqliteCommand 等关键字,居然找不到它在哪里使用命令。你不要忘了,DbConnection 类有个叫 CreateCommand 的方法,所有派生类都实现这个方法。SqlConnection 类会让它返回 SqlCommand 实例,SqliteConnection 类会让它返回 SqliteCommand 实例。但由于 CreateCommand 方法定义的返回类型是 DbCommand 类,因此它有通用性。EF Core 中就是调用了 CreateCommand 方法来获得命令实例的。这就不得不提前文中出现的一个接口了—— IRelationalCommand。它统一了一些方法:

1、ExecuteNonQuery / ExecuteNonQueryAsync 方法:执行命令,通常不返回查询结果,如 INSERT、DELETE 等;

2、ExecuteReader / ExecuteReaderAsync 方法:执行后会有查询结果,但 XXXDataReader 类被 RelationalDataReader 类封装了;

3、ExecuteScalar /

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xdpcxq1029

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值