Entity framework ConnectionString属性尚未初始化
我正在使用entity framework进行两个查询,一个接一个,第一个总是很好,但第二个总是返回我: ConnectionString属性尚未初始化 如果我改变了方法的顺序,同样的事情也会发生,第一个很好,第二个抛出这个异常 我在页面中使用的代码如下:Entity framework ConnectionString属性尚未初始化,entity-framework,Entity Framework,我正在使用entity framework进行两个查询,一个接一个,第一个总是很好,但第二个总是返回我: ConnectionString属性尚未初始化 如果我改变了方法的顺序,同样的事情也会发生,第一个很好,第二个抛出这个异常 我在页面中使用的代码如下: > var count = RequestBaseBL.GetGenericResultsCount(query.QuerySql); > > var datatable
> var count = RequestBaseBL.GetGenericResultsCount(query.QuerySql);
>
> var datatable = RequestBaseBL.GetGenericResults(query.QuerySql, 0);
在我的梦里
public int GetGenericResultsCount(string strsql)
{
using (var connection = (SqlConnection)_context.Database.Connection)
{
var adapter = new SqlDataAdapter(strsql, connection);
var results = new DataSet();
adapter.Fill(results, "Results");
return results.Tables["Results"].Rows.Count;
}
}
public DataTable GetGenericResults(string strsql, int pageIndex)
{
StringBuilder sb = new StringBuilder();
sb.Append("WITH MyPagedData as ( ");
int indexFrom = strsql.IndexOf("from");
sb.Append(strsql.Substring(0, indexFrom));
sb.Append(", ");
sb.Append("ROW_NUMBER() OVER(ORDER BY RequestBaseId DESC) as RowNum ");
sb.Append(strsql.Substring(indexFrom));
sb.Append(") ");
sb.Append("SELECT * from MyPagedData where RowNum between @StartIndex and @StartIndex + 10");
using(var connection = (SqlConnection)_context.Database.Connection)
{
var adapter = new SqlDataAdapter(sb.ToString(), connection);
adapter.SelectCommand.Parameters.Add("@StartIndex", SqlDbType.Int).Value = pageIndex;
var results = new DataSet();
adapter.Fill(results, "Results");
return results.Tables["Results"];
}
}
通常,当您使用
new
操作符或通过工厂方法创建分配给变量的对象时,应使用using
构造。DbContext
中的Database
的Connection
属性仅在连接不存在时创建连接;在所有其他情况下,该属性只返回一个现有属性
在您的代码中,第一次调用获得一个“活动”连接,对其进行操作,然后通过调用Dispose
来关闭它,该调用由using
隐式执行。此时,DbContext
的数据库
引用了一个已发布的对象。第二次调用将拾取已释放的对象,并尝试使用它,从而触发一个错误
要解决此问题,只需使用分配替换:
var connection = (SqlConnection)_context.Database.Connection;