c# - 如何安全地使用 EF Core Context 的 DBConnection 对象
问题描述
出于某种原因,我想获取 DBContext 对象的 DBConnection 对象。
因为 DBConnection、DBCommand 和 DBDataReader 是一次性的,所以我这样使用它们:
public static void Query(DBContext context)
{
using var conn = context.Database.GetDbConnection();
conn.Open();
using var cmd = conn.CreateCommand();
// do something
using var reader = cmd.ExecuteReader();
// do something
}
当这个方法完成后,我想在另一个方法中使用 DBContext 对象。然后 DBContext 对象因InvalidOperationException出错:连接字符串属性尚未初始化
我尝试在引发此异常的下一个方法中获取 DBConnection,并发现 State 属性为“已关闭”。
该方法是否context.DataBase.GetDbConnection()
每次都返回相同的实例?
如果我没有在 conn 对象之前添加using ,如下所示:
var conn = context.Database.GetDbConnection();
using var cmd = conn.CreateCommand();
// something just the same as above
一切都好。
如果 DBContext 对象有其他事情要做,我可以在使用 DBConnection 对象后不释放它吗?
这安全吗?
顺便说一句,DBContext 对象由using
.
解决方案
如果 DBContext 对象有其他事情要做,我可以在使用 DBConnection 对象后不释放它吗?
这安全吗?
这是正确的做法,而且是安全的。不用担心DbConnection
,只要DbContext
处理它,它就会关闭并DbConnection
为您处理相关的。
推荐阅读
- html - 不变的内容应该在 index.html 或顶级 app.vue 文件中
- python - Jupyter Notebook 图片标题
- php - 我试图在 php 中创建一个循环,吐出下面的内容
- networking - Kubernetes 设置中集群的 pod 中的 Tcpdump(在 Minikube 设置中)
- git - git 在合并冲突后立即说“没有文件需要合并”
- c++ - 在c ++中将对象设置为等于同一类的构造函数是否有效?
- sql-server - 从三个表中获取 datediff
- machine-learning - 在数字信号中寻找模式
- javascript - 使用 python django + Javascript 嵌入推文
- c - 从一段单词创建哈希表和节点