【问题标题】:static classes for database access?用于数据库访问的静态类?
【发布时间】:2010-02-09 09:30:26
【问题描述】:

我正在使用 DataClassesDataContext 将数据库中的所有表映射到我的 asp.net 应用程序中。

为了进行 CRUD 操作,我使用方法创建了静态类,并在每个方法中实例化了 DataClassesDataContext。

例如:

public static class UserQ
{
    public static User getUserById(int userId)
    {
        DataClassesDataContext db = new DataClassesDataContext();
        var requestedUser = (from u in db.Users
                             where u.User_id == userId
                             select u).First();
        if (requestedUser != null)
            return (User)requestedUser;
        else
            return null;
    }
}

我不确定这种在 Web 应用程序中进行数据库操作的方式是否安全? 如果没有,你能建议一个更好的模式吗?

【问题讨论】:

    标签: asp.net c#-3.0


    【解决方案1】:

    由于 DataClassesDataContext 实现了IDisposable,您应该使用 using 指令来包装它:

    using (DataClassesDataContext db = new DataClassesDataContext())
    {
    ...
    }
    

    【讨论】:

      【解决方案2】:

      我建议看一下存储库模式:

      1) Example 1
      2)Example 2(Scott Gu 的 Nerd Dinner 的第一章 - 它是针对 MVC,但说明的存储库模式在没有 MVC 的情况下工作)

      【讨论】:

      • 我同意。它确实会简化事情,对于 LINQ to SQL,如果您依赖 IQueryable,它将大大提高您的性能。看看这里stackoverflow.com/questions/1223194/…
      • 谢谢。以前没有听说过存储库模式。在对文章进行评分后,我可以说:太好了!
      【解决方案3】:

      在 Web 应用程序中使用 STATIC 时我会非常小心。有时错误非常微妙,以至于您会花费大量时间进行调试。

      我认为 bnkdev 和 Oded 一针见血:查看存储库模式并将上下文调用包装在 using 语句中...

      HTH。

      【讨论】:

        猜你喜欢
        • 2016-05-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-08
        相关资源
        最近更新 更多