我正在研究一個80%完成的大項目(雖然有些功能需要實現)。但是最近我們發現該項目不允許併發請求(我的意思是多個用戶請求同一個存儲庫)。有時我們會得到空引用&有時「執行無法打開可用連接,連接狀態已關閉」等。 我們的源代碼嚴格限制在世界之外。這裏有一些代碼。讓我知道是否有任何建築問題,因爲建築傢伙離開了公司。它使用ninject 3.0。我已經使用InRequestScope()的所有經理的庫,但沒有運氣DbContext with Ninject ADO.NET
更新:我沒有使用任何ORM這裏,我試圖通過數據適配器在我的DbContext類連接SqlServer的
public class DbContext
{
//execute query , nonquery etc using adapter & datatable
//Example
var dt=new DataTable();
_adapter=new _dbfactory.CreateAdapter();
_adapter.Fill(dt);
return dt;
}
//MyController
public class MyController
{
private readonly IMyManager_iMyManager;
public MyController(IMyManager iMyManager){_iMyManager=iMyManager}
public ActionResult Save()
{
_iMyManager.Save()
}
}
// My Manager
public class MyManager:IMyManager
{
private readonly IMyRepository _iMyRepository;
DbContext _dbContext=new
DbContext("someParameter","connectionstring");
public MyManager
(
IMyRepository iMyRepository, DbContext dbContext
)
{
_iMyRepository=iMyRepository;
_dbContext=dbContext;
}
Public DataTable GetDataTable()
{
try
{
_dbContext.Open();
_iMyRepository.GetDataTable()
}
catch(Exception ex){}
finally{_dbContext.Close()}
}
}
//這裏是倉庫
Public class MyRepository:IMyRepository
{
public _dbContext;
public MyRepository(DbContext dbContext)
{
_dbContext=dbContext;
}
public DataTable GetDataTable()
{ return _dbContext.ExecuteQuery()}
}
最後這是我們ninject結合
public class NinjectDependencyResolver()
{
var context=new DbContext("someparameter","connectionStrin");
kernel.Bind<IMyManager>().To<MyManager>().WithConstructorArgument("_dbContext",context);
kernel.Bind<IMyRepository >().To<MyRepository >().WithConstructorArgument("_dbContext",context);
}
有可能有一些錯字在我的代碼,我寫了一切,所以編輯
你能提供更多的細節嗎?您是否使用任何ORM(例如EF6)來訪問數據庫?哪個版本?或者你是否試圖使用本地驅動程序直接連接到數據庫,哪一個? Sql Server,Oracle等? – Vinod
在這一行中,空引用出現?你的Controller只調用Save方法。如果您也提供該方法的來源,這將有所幫助。 –