gpt4 book ai didi

entity-framework - ConnectionString 属性尚未初始化

转载 作者:行者123 更新时间:2023-12-03 07:32:29 25 4
gpt4 key购买 nike

我正在使用 Entity Framework 进行两个查询,一个接一个,第一个查询总是工作正常,但第二个查询总是返回我:ConnectionString 属性尚未初始化。

如果我改变方法的顺序,同样的事情会发生,第一个方法工作正常,第二个方法抛出此异常。

我在页面中使用的代码如下:

>  var count = RequestBaseBL.GetGenericResultsCount(query.QuerySql);    
>
> var datatable = RequestBaseBL.GetGenericResults(query.QuerySql, 0);

在我的 DAL 中

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"];
}
}

最佳答案

一般来说,当您创建分配给变量的对象时,应该使用 using 构造,无论是使用 new 运算符还是通过工厂方法。仅当连接尚不存在时,DbContextDatabaseConnection 属性才会创建连接;在所有其他情况下,该属性仅返回现有的属性。

在您的代码中,第一次调用获取“实时”连接,对其进行操作,然后通过 using 隐式执行的 Dispose 调用将其关闭。此时,DbContextDatabase 拥有对已释放对象的引用。第二次调用获取该已释放的对象,并尝试使用它,从而触发错误。

要解决此问题,只需将 using 替换为赋值即可:

var connection = (SqlConnection)_context.Database.Connection;

关于entity-framework - ConnectionString 属性尚未初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10911635/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com