【发布时间】:2014-08-08 17:28:06
【问题描述】:
我正在开发一个使用 Breeze 和 Entity Framework 6 以及工作单元和存储库模式的应用程序。目前,我们正在探索在应用程序中使用静态 UnitOfWork 实例的可能性。我已经在我们的控制器中设置了这个:
public class BreezeController : ApiController
{
private static readonly UnitOfWork _unit = new UnitOfWork();
...
[HttpPost]
public SaveResult SaveChanges(JObject saveBundle)
{
return _unit.SaveChanges(saveBundle);
}
}
这里,UnitOfWork 类包含 EFContextProvider:
public class UnitOfWork
{
private readonly EFContextProvider<MyContext> _contextProvider = new EFContextProvider<MyContext>();
...
public SaveResult SaveChanges(JObject saveBundle)
{
return _contextProvider.SaveChanges(saveBundle);
}
}
在查询数据库和将新实体保存到数据库时,这似乎工作正常。但是,在前端第一次调用 saveChanges() 后,对数据库的任何后续查询都失败并出现错误:“Value cannot be null. Parameter name: connection”。我做了一些挖掘,似乎一旦 SaveChanges 完成,与数据库的连接就会重置(例如,ContextProvider 中的 EntityConnection.ConnectionString 设置为空字符串)。我认为这是导致错误的原因(当然,当不使用静态 UnitOfWork 时这不是问题,因为在这种情况下将为下一个查询创建一个新的 EFContextProvider 实例)。
假设这是问题所在,有没有办法阻止 EFContextProvider 在调用 SaveChanges 时重置数据库连接?或者有没有办法强制它及时重新建立连接以进行下一个查询?另一方面,是否有某些原因我不应该尝试使用 EFContextProvider 的静态实例?
【问题讨论】: