2

在本文的帮助下,我在我的软件中实现了存储库模式。一个问题让我大吃一惊。"var ourDatabase = new Database();"我认为数据库类应该实现单例模式,因为用户不应该使用语句创建多个数据库上下文。我是对的还是这种情况对于使用实施来说不是一个关键问题。

4

1 回答 1

7

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

另请注意,上下文会缓存已加载的数据并默认跟踪更改。简而言之,这可能意味着随着越来越多的对象被跟踪,内存膨胀和性能下降——尽管在实践中这种影响会有所不同。

从性能的角度来看,Entity Framework 在底层实现了连接池,因此不必担心创建和处理数据库上下文对象 - 它非常便宜。

于 2013-01-19T22:09:39.553 回答