使用实体框架

时间:2015-07-02 18:08:42

标签: c# entity-framework wcf dependency-injection repository

我有接收IRepository的WCF服务。

IRepository repository;

public MyWcfService(IRepository repository)
{
    this.repository= repository;
}

存储库需要基于实体框架。它有方法GetSave等......

我的问题是,如果我每次从此WCF服务类调用方法时都要创建和处置DbContext,我应该如何实现此存储库类。

P.S。我正在使用Ninject库来解决依赖关系

2 个答案:

答案 0 :(得分:0)

如果要将数据库上下文作为存储库类的依赖项,那么存储库类应实现 IDisposable ,并且在 Dispose 方法中应该处置数据库上下文

您的存储库应在http请求处理结束时处理,因此您应该使用InRequestScope()注册 IRepository 。您还应该使用InRequestScope()注册您的WCF服务,这样它就不会超过IRepository。

以下是 InRequestScope()的文档:
https://github.com/ninject/Ninject.Web.Common/wiki/InRequestScope

和ninject中对象范围的区别:
https://github.com/ninject/ninject/wiki/Object-Scopes

答案 1 :(得分:0)

在WCF中使用依赖注入有点不同。您需要挂钩实例创建管道和服务主机。

有一个特定的Ninject扩展来使这更容易:Ninject.extensions.Wcf

https://github.com/ninject/Ninject.Extensions.Wcf

还有这个博客将解释如何使用它:

http://blog.tonysneed.com/2011/10/24/using-ninject-with-wcf-services/

注意:这有点涉及,对于仅链接引用感到抱歉......其他人可以根据此自由创建完整的答案。