结合单例模式和存储库模式

san*_*p22 2 c# repository-pattern

我用的帮助下实现的存储库模式,以我的软件文章.一个问题让我难以置信.我认为Database类应该实现单例模式,因为用户不应该使用"var ourDatabase = new Database();"statement 创建多个数据库上下文.我是对的还是这种情况不是使用实施的一个关键问题.

Fra*_*ans 6

您不应该将数据库上下文作为具有Entity Framework的单例.对于初学者,每个上下文实例都会跟踪对其所做的所有更改,"保存更改"会保存所有更改.因此,如果您有一个Web应用程序,并且您将上下文设置为单个,那么所有用户都将更新相同的上下文,当一个名为"保存更改"的用户时,它将为每个人保存更改.在单用户Windows应用程序中,这不是问题,除非您将应用程序的不同部分并行工作.

还要注意,上下文缓存已加载的数据并默认跟踪更改.简而言之,这可能意味着内存膨胀并且随着越来越多的对象被跟踪而降低性能 - 尽管在实践中它的影响各不相同.

从性能的角度来看,实体框架在封面下实现了连接池,因此不必担心创建和处理数据库上下文对象 - 它非常便宜.