c# - 数据库连接(最佳实践)

标签 c# sql linq

我为我的项目采用了存储库/服务设计模式,当我构建它时,我对自己进行了思考。

获取存储库的所有项目(将其保存在缓存中)然后使用 LINQ 进行过滤而不是每次调用都使用数据库连接会更好吗?

例如,我有这个:

public Asset Get(int id)
{
    return GetAll().Where(a => a.Id == id).FirstOrDefault();
}

public IList<Asset> GetAll()
{
    return AssetData.Get(userId, companyId);
}

而不是:

public Asset Get(int id)
{
    return AssetData.Get(id, userId, companyId);
}

public IList<Asset> GetAll()
{
    return AssetData.Get(userId, companyId);
}

我认为第一个是最好的,因为它可以加快系统速度并且数据库连接/查询会更少。

那么,有人可以向我解释一下这种情况的最佳实践吗?

最佳答案

这是过早的优化。在您开始使用该应用程序之前,您不知道瓶颈在哪里。等到您开始受到性能影响,然后看看可以采取哪些措施来提高性能。您还对许多服务日常使用的成熟技术进行了二次猜测。如果处理得当,数据库相当健壮且高性能。

通过将存储库放在界面后面,您已经做了正确的事情。这使您可以灵活地更改实现,而无需更改使用的代码。考虑使用 ERM 解决方案,如 NHibernatecaching内置。重新发明别人已经改进过的轮子是没有意义的。

关于c# - 数据库连接(最佳实践),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18062041/

相关文章:

c# - 识别事件键是否为文本(不仅是字母数字)

c# - 如何禁用 Excel 内置的 RibbonButton?

mysql - 记录中的sql查询问题

sql - 根据特定条件选择在 FROM 子句中使用的表

c# - 确定集合至少有 2 个项目的有效方法

c# - 在 C# 测试中从 Json 文件中读取和映射数据

c# - C# 锁定将等待多长时间,如果代码在锁定期间崩溃怎么办?

mysql - 从另一个表中选择满足约束的所有行

c# - 如何检查比较两个列表是否至少有一项不同?

c# - 在 C# 中交换字典类型参数的复杂性