EF AND MVC - 通过控制器传递存储库

时间:2014-10-31 09:50:08

标签: c# asp.net-mvc entity-framework

我有一个使用Entity Framework ORM的MVC应用程序。一切都按预期工作 - 但是,在每个新控制器上我初始化一个新的存储库

    public AController()
        : this(new ARepository())

     public AController(IA _A)
     {
       this.m_A = _A
     }

但是在初始化新的存储库时,它需要从数据库和一个存储库中获取,这需要超过5000个实体

list<object> ob = m_A.entity.ToList(); // This now has over 5000+ items 

显而易见的问题是,当用户对这些控制器进行POSTS或GETS时,它会一直这样做,当然,当我在控制器上初始化一个新的存储库时,它会降低性能并且我无法使用local缓存会加快速度。

有没有办法可以将存储库发送到每个控制器,或者无论如何我可以加速EF获取?

谢谢

1 个答案:

答案 0 :(得分:2)

您可以使用依赖注入来实例化您的存储库,将其实例化为单例对象。如果您不打算使用DI容器,那么您可以在某个项目中创建一个可以在控制器中查看/共享的静态实例:

private static IMyRepository _instance;

public IMyRepository Repository
{
    get 
    {
        if (_instance == null)
        {
            _instance = new SomeRepositoryObject();
        }

        return _instance;
    }
}

在您的情况下,由于初始化,您实际上可以创建一个方法而不是属性,并且在创建对象之后,您将调用您的方法来加载5000+个对象。