我对MVP和Entity Framework还比较新,所以请多包涵。
目前我有一个视图+Presenter组合,视图有两个事件:编辑和删除,而Presenter只是监听这些事件。我还设置了服务对象和存储库。服务层采取一些存储库实现,这些实现采用ObjectContext,因此构建顺序为(将上层对象传递给下面的对象):
ObjectContext
|
V
Repositries
|
V
Service Object
|
V
Presenter
现在的问题是,当我在顶部创建对象上下文时,它会在整个presenter生命周期内保持活动状态,这意味着Edit和Delete使用来自service的相同上下文实例。
因此,调用ServiceObject.Delete和ServiceObject.Edit使用相同的上下文,这使得难以管理更改跟踪。据我了解,上下文实际上应该只存在短暂时间,并且仅用于工作单元,对我来说,Edit和Delete都是不同的工作单元。
如何使用entity framework进行DI并仍然管理上下文生命周期?
我看到有人在存储库内部新建对象上下文,这是一个好的模式吗?
还是应该在service对象中执行此操作,类似于:
ServiceObject{
public void Edit(// some args) {
Using(var context = new MyObjectContext) {
var repo = new MyRepo(context);
var entity = repo.GetForID(12);
// Do some stuff for edit
context.SaveChanges();
}
}
}
但是如果我这样做,我就不再将我的存储库传递到ServiceObject的构造函数中,也不进行DI :(.
在这种情况下我该怎么办?
有人知道任何开源项目可以帮助我解决这个问题吗?
谢谢。