【发布时间】:2016-12-19 23:53:49
【问题描述】:
我正在做一个完成了 80% 的大项目(虽然有些功能需要实现)。但最近我们发现该项目不允许并发请求(我的意思是多个用户请求同一个存储库)。有时我们得到空参考和有时“执行无法打开可用连接,连接状态已关闭”等。 我们的源代码在世界之外受到严格限制。这是一些代码。如果有任何架构问题,请告诉我,因为架构人员离开了公司。它使用的是ninject 3.0。我已经将 InRequestScope() 用于所有经理的存储库,但没有运气
更新:我这里没有使用任何 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 等?
-
空引用出现在哪一行?您的
Controller仅调用Save方法。如果您也提供该方法的来源会有所帮助。