我有一个使用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获取?
谢谢
答案 0 :(得分:2)
您可以使用依赖注入来实例化您的存储库,将其实例化为单例对象。如果您不打算使用DI容器,那么您可以在某个项目中创建一个可以在控制器中查看/共享的静态实例:
private static IMyRepository _instance;
public IMyRepository Repository
{
get
{
if (_instance == null)
{
_instance = new SomeRepositoryObject();
}
return _instance;
}
}
在您的情况下,由于初始化,您实际上可以创建一个方法而不是属性,并且在创建对象之后,您将调用您的方法来加载5000+个对象。