【问题标题】:Passing environment variables to Data Access Layer将环境变量传递给数据访问层
【发布时间】:2009-04-06 19:20:43
【问题描述】:

我们编写的每个存储过程都必须将 clientip、serverip、windows 用户名等传递给它。

问题是我如何有效地将这些传递给 DAL?

【问题讨论】:

    标签: c# data-access-layer


    【解决方案1】:

    我假设这是 ASP.NET 中的 Web 应用程序。如果是这种情况,您可以通过以下静态实例在 Web 应用程序之外的 Web 请求上下文中访问所有这些内容:

    System.Web.HttpContext.Current
    

    如果您需要的一切都是您通常在页面级别默认可用的请求、响应和用户对象中拥有的标准内容,那么这应该就是您所需要的。如果您需要为您的网络应用程序定制的信息,那么 Ben 的答案(上图)应该可以工作。

    【讨论】:

      【解决方案2】:

      您应该可以在 System.Environment 类或您自己的某种线程主体中访问所有上述数据。您的 DAL 可以轻松地从这两个或任何一个来源中获取信息。

      【讨论】:

        【解决方案3】:

        创建一个类来保存这些数据,一个工厂来构建它和辅助方法来使用它。

        IUserContext
        {
        int param1 {get;set;}
        int param2 {get;set;}
        
        SqlParameter[] GetSqlParameters();
        }
        
        UserContext : IUserContext{}
        
        UserContextFactory
        {
            internal IUserContext IUserContextFromRequest(){}
        }
        

        祝你好运

        【讨论】:

        • 与我的建议类似。基本上,接受 Ben 的推荐,并使其实现 IPrincipal。然后你可以把它存储在线程中,不用担心更新它。
        • 我在这个应用程序中只有一个线程(它是一个没有多线程的网络应用程序)。如果我使用上面的方法(我喜欢),这会是持久的 btwn 回发吗?
        • 有人能清楚地解释一下您将如何在实际应用程序中使用这个类吗?据我了解,使用它的方法是将其设为静态。但是,我不妨使用 Global.asax。我在这里错过了什么吗?
        • 我喜欢使用自定义主体和身份,但这似乎是我将保留在那里的更多信息。对我来说,每个请求都应该使用此信息记录一次,然后后续查询只需要用户/会话 ID 作为参数。
        • 就多线程而言,Web 应用程序是多线程的。单个请求是单个线程,但五个并发请求将是五个线程。将主体存储在线程上只会持续到当前请求的整个生命周期。
        猜你喜欢
        • 2013-12-29
        • 2021-09-05
        • 2020-03-27
        • 2017-03-30
        • 2018-08-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-03-06
        相关资源
        最近更新 更多