【问题标题】:Combining singleton pattern and repository pattern结合单例模式和存储库模式
【发布时间】:2013-01-19 17:20:16
【问题描述】:

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

【问题讨论】:

  • 文章链接失效。
  • 在我的应用程序中,我经常使用多个不同的数据库上下文。
  • 我修复了链接。为什么选择 Uwe?
  • 当他们为同一个数据库创建多个 Database 类的实例时会出现什么问题?
  • 单例模式的问题(以至于它几乎可以被称为反模式)是它在整个代码库上强制“只有一个实例”假设。太多不必要的单例,你又回到了全局变量领域!

标签: c# repository-pattern


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2019-09-04
    • 1970-01-01
    • 2014-03-17
    • 2014-03-05
    • 1970-01-01
    • 2012-03-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多