【问题标题】:asp.net customer information classasp.net 客户信息类
【发布时间】:2011-10-28 19:19:32
【问题描述】:

我正在构建一个 asp.net Web 应用程序(框架 4),并希望开发一个包含基本客户信息(客户 ID、电子邮件、电话、地址信息、客户帐户等)的类,它应该是 可通过整个网站页面访问,这样我就不会在某个地方(会话等)存储客户 ID,并在我需要有关该客户的一些信息时拨打 DB。
我只想在用户登录到门户并获取他/她的基本信息并将其以类的形式存储时才调用一次 DB。

谁能告诉我们如何开发这种类型的类以及在哪里/如何存储它以使其适用于所有页面?

【问题讨论】:

  • 我认为您误解了类的工作方式,尤其是在持久性方面。主要是,类是持久性无知的。 HTTP 协议本质上是无状态的,因此一旦请求完成,您的类实例将被销毁。您将需要在某些时候使用 Session(或其他一些持久性机制)来存储您的客户信息(即使它是一个类对象)。
  • ASP.NET 页面是无状态的。全局信息需要存储在某个地方。如果使用正确,Session 使用起来也不错。如果您想最小化 Session 中的内容,只需存储用户 ID(或您拥有的任何唯一标识符),当您需要有关该客户的信息时,从数据库中获取它。
  • 我完全同意布赖恩的观点,从你的问题来看,你似乎错过了面向对象编程的工作原理。

标签: asp.net


【解决方案1】:

一旦用户成功登录,对 DB 进行一次调用以检索当前的Customer 对象并将其保存到Session。不要只是认为你会滥用服务器的内存。该对象将小于 500 字节,如果您有 1000 个实时会话,则它仅小于服务器内存的 500 KB。

您也可以考虑将Cache 输入到User ID 并同时检索Customer 对象。

您也可以将Customer 对象保存到ViewState,这样不会占用服务器上的任何内存。

从任何页面访问Session\ Cache\ ViewState 非常容易。

对于Session:

protected void Page_Load(object sender, EventArgs eventArgs)
{
    Customer customer = Session["customer"] as Customer;
}

private void LoginSuccess(int customerID) {
    Customer customer = _customerRepository.GetById(customerID);
    Session["customer"] = customer;
}

**对于ViewState,它与Session 相同 - 只需将Session 替换为ViewState。

如果您想将其存储在Cache 中,请使用

HttpContext.Current.Cache.Insert("customer" + customerId, customer, new CacheDependency("customer" + customerId), Cache.NoAbsoluteExpiration, Cache.NoSlidingExpiration);

您可以像这样访问Cache 项目:

HttpContext.Current.Cache["customer" + customerID]

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-03
    • 2012-01-02
    • 2015-11-13
    • 2013-09-23
    • 1970-01-01
    • 2010-11-01
    • 2017-08-01
    相关资源
    最近更新 更多