C# 如何使用EF核心上下文';DBS连接对象安全
出于某种原因,我想获取DBContext对象的DBConnection对象 因为DBConnection、DBCommand和DBDataReader是一次性的,所以我使用它们如下:C# 如何使用EF核心上下文';DBS连接对象安全,c#,entity-framework,C#,Entity Framework,出于某种原因,我想获取DBContext对象的DBConnection对象 因为DBConnection、DBCommand和DBDataReader是一次性的,所以我使用它们如下: public static void Query(DBContext context) { using var conn = context.Database.GetDbConnection(); conn.Open(); using var cmd = conn.CreateCommand
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
}
var conn = context.Database.GetDbConnection();
using var cmd = conn.CreateCommand();
// something just the same as above
当这个方法完成时,我想在另一个方法中使用DBContext对象。然后DBContext对象出现了InvalidOperationException错误:connectionstring属性尚未初始化
我尝试在引发此异常的下一个方法中获取DBConnection,发现State属性为“Closed”
context.DataBase.GetDbConnection()方法是否每次都返回相同的实例
如果我不在conn对象之前添加using,如下所示:
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
}
var conn = context.Database.GetDbConnection();
using var cmd = conn.CreateCommand();
// something just the same as above
一切都好
如果DBContext对象还有其他事情要做,我可以在使用DBConnection对象之后不处理它吗
这安全吗
顺便说一下,DBContext对象是由使用
声明的
在使用DBConnection对象之后,如果
DBContext对象还有其他事情要做吗
这安全吗
这样做是正确的,也是安全的。不要担心DbConnection
只要DbContext
被释放,它就会关闭并为您释放相关的DbConnection
。注意:如果您使用的是EF Core 3.0,您可以使用“.FromSqlRaw()”而不是.CreateCommand()
参数化查询可以使用
var result= context.ExampleTable.FromSqlRaw("SELECT * From ExampleTable Where Id= {0}", id).FirstOrDefault();
有关更多详细信息,请参阅