我在this文章的帮助下为我的软件实现了存储库模式。一个问题让我难以置信。我认为Database类应该实现单例模式,因为用户不应该使用"var ourDatabase = new Database();"
语句创建多个数据库上下文。我是对的还是这种情况不是使用实施的一个关键问题。
答案 0 :(得分:6)
您不应将数据库上下文作为具有Entity Framework的单例。 对于初学者,每个上下文实例都会跟踪对其所做的所有更改,“保存更改”会保存所有更改。因此,如果您有一个Web应用程序,并且您将上下文设置为单个,那么所有用户都将更新相同的上下文,当一个名为“保存更改”的用户时,它将为每个人保存更改。在单用户Windows应用程序中,这不是问题,除非您将应用程序的不同部分并行工作。
还要注意上下文缓存已加载的数据并默认跟踪更改。简而言之,这可能意味着内存膨胀并且随着越来越多的对象被跟踪而降低性能 - 尽管在实践中它的影响各不相同。
从性能的角度来看,实体框架在封面下实现了连接池,因此不必担心创建和处理数据库上下文对象 - 它非常便宜。