微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

储存温度ASP.NET Core (NopCommerce) 中的数据

如何解决储存温度ASP.NET Core (NopCommerce) 中的数据

亲爱的 StackOverflow 社区,

对于我的一个项目,我需要将(临时)数据存储在数据库以外的其他地方。其实它有点复杂。我在 nopCommerce 中有一个结帐页面用户可以在其中选择交货时间甚至地点,例如取货。此数据必须临时存储,直到用户付款。只有这样我才会请求数据并存储在数据库中。以便稍后我可以检索数据并显示在我的仪表板中,以便我知道计划何时运送包裹。

要求:

  • 续航时间:12-24 小时。
  • 存储为用户特定数据。
  • 必须保护好几个会话的数据。取决于用户。例如。如果用户选择了交货时间,但在付款前想查看其他地方。这些数据必须存储在所有这些会话中。
  • 如果可能,服务器端。

我有很多选择跟随微软: Session and state management in ASP.NET Core

现在我尝试使用“MemoryCacheEntryOptions”将数据存储在内存中(缓存数据)。问题是它的应用范围很广。并且很难在数百个用户的情况下维护。

其他选项是'会话状态'。 问题是这些数据只持续一个会话。我需要保存数据至少 12 到 24 小时。

然后我们有'临时数据'。这似乎是一个很有前途的选择。它很棒,因为它一直保存到被使用/阅读。您甚至可以使用“Peek”和“Keep”方法在偷看时保留数据。问题:它需要一个控制器。而请求数据是一个不需要Controller的回调方法

'查询字符串' 那么它不是很多吗?这可能不是用户关键数据,但似乎查询字符串不是我要找的。​​p>

'隐藏字段' 也不太适合。因此,它不是表单数据。

'HttpContext.Items' 显然不适合。数据仅为单个请求存储。

'缓存'难以维护用户特定数据的方式。

所以我的问题是。如果可能的话,我如何将所有这些数据临时保存在服务器端至少一天,同时有数百个用户。并稍后在回调中请求数据,将其存储在数据库中,直到订单发货。

解决方法

NopCommerce 在 Nop.Services.Common 中公开了一个名为 GenericAttributeService 的类。这允许您存储特定于每个客户的自定义属性数据。

要使用它,首先将 GenericAttributeService 注入您的类(控制器、服务类等)。

private readonly IGenericAttributeService _genericAttributeService;
public MyFancyController(IGenericAttributeService genericAttributeService)
{
   _genericAttributeService = genericAttributeService;
}

要保存当前客户的数据,请使用 SaveAttribute 并保存您需要的键值对:

 _genericAttributeService.SaveAttribute<string>(_workContext.CurrentCustomer,"MyKeyName","Value to save for this customer")
 _genericAttributeService.SaveAttribute<int>(_workContext.CurrentCustomer,"My2ndKeyName",model.id)

要获取数据,请使用 GetAttributesForEntity,其中实体是您的键值。

var attribute = _genericAttributeService.GetAttributesForEntity(_workContext.CurrentCustomer.Id,"Customer").Where(x => x.Key == "MyKeyName").FirstOrDefault();

使用 DeleteAttribute 删除属性:

_genericAttributeService.DeleteAttribute(attribute);

请注意,我们使用了 _workContext 来帮助公开当前客户。 这已经与应用程序中已有的其他临时功能很好地配合使用,例如管理购物车、愿望清单等,因此浏览其他示例的源代码也很有帮助。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。