【发布时间】:2009-07-23 01:54:14
【问题描述】:
我对 MVP 和实体框架世界还很陌生,所以请多多包涵。
我目前有一个 View + Presenter 组合,该视图有两个事件 Edit 和 Delete 并且 Presenter 只是监听这些事件。我还设置了一个服务对象和存储库。服务层采用一些采用 ObjectContext 的存储库实现,因此构造顺序是(将顶部对象传递给它下面的对象:
ObjectContext
|
V
Repositries
|
V
Service Object
|
V
Presenter
现在的问题是,当我在顶部创建对象上下文时,演示者一直处于活动状态,这意味着编辑和删除使用服务中的相同上下文实例。
因此调用 ServiceObject.Delete 和 ServiceObject.Edit 使用相同的上下文,这使得管理更改跟踪变得困难。据我了解,上下文实际上应该只是短暂的,并且只适用于一个工作单元,对我来说,编辑和删除都是不同的工作。
您如何使用实体框架进行 DI 并仍然管理上下文生命周期?
我看到人们刚刚在存储库中新建了对象上下文,这是一个好的模式吗?
或者我应该在服务对象中这样做,例如:
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 :(。
在这种情况下我该怎么办?
有谁知道我可以查看的任何开源项目可以帮助我解决这个问题。
谢谢。
【问题讨论】:
标签: c# entity-framework dependency-injection