c# - 结合单例模式和存储库模式

标签 c# repository-pattern

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

最佳答案

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

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

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

关于c# - 结合单例模式和存储库模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14416814/

相关文章:

rest - 获取重骨料列表

.net - 可以使用存储库模式 + 存储过程吗?他们应该/可以返回 IQueryable 吗?

c# - 多元素到多行

c# - 如何将一些 "statistics"从 C# 程序传递给另一个程序?

c# - Entity Framework 通用存储库错误

c# - 通用存储库模式 - DDD 实现

oop - 管理 Laravel 中的关系,遵循存储库模式

c# - 复杂泛型中的无效方差

c# - 全局静态变量不改变值

c# - 如何使用多个控件使用相同的 ObjectDataSource,但使用不同的过滤器