我在 this 的帮助下为我的软件实现了存储库模式文章。有一个问题令我困惑。我认为数据库类应该实现单例模式,因为用户不应该使用 "var ourDatabase = new Database();"
语句创建多个数据库上下文。我是对的吗?或者这种情况对于实现的使用来说不是一个关键问题。
最佳答案
您不应该将数据库上下文作为 Entity Framework 的单例。 对于初学者来说,每个上下文实例都会跟踪对其所做的所有更改,并且“保存更改”会保存所有更改。因此,如果您有一个 Web 应用程序,并且将上下文设置为单例,那么所有用户都将更新相同的上下文,并且当调用“保存更改”时,它将为每个人保存更改。在单用户 Windows 应用程序中,这不是什么问题,除非应用程序的不同部分并行工作。
还要注意,上下文默认会缓存已加载的数据并跟踪更改。简而言之,随着跟踪的对象越来越多,这可能意味着内存膨胀和性能下降 - 尽管实际上这种影响各不相同。
从性能的角度来看, Entity Framework 在底层实现了连接池,因此不必担心创建和处置数据库上下文对象 - 它非常便宜。
关于c# - 结合单例模式和存储库模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14416814/