【问题标题】:ASP.NET Core - What is the best way to persist a model across whole application?ASP.NET Core - 在整个应用程序中保留模型的最佳方法是什么?
【发布时间】:2016-07-19 17:12:03
【问题描述】:

首先,我有一个 ASP.NET MVC Core 应用程序,它充当用户登录的向导,并开始构建数据的“配置”。本质上,当用户浏览每个页面时,他们正在为这个“配置”配置/添加不同的数据。当他们浏览这些页面时,配置会一路保存。我遇到的问题是想出一个很好的解决方案来保存配置进度并将其保留在整个应用程序中。这是我的几个模型的一个非常简化的版本以及我正在做的事情(没有涉及太多领域细节):

public class Configuration 
{
    string ConfigName;
    CustomerInfo CustomerInfo;
    InputData Input;
}

public class CustomerInfo
{
    string CustomerName;
    string Company;
    string PhoneNumber;
}

public class InputData 
{
    int SomeNumber;
    int SomeOtherInput;
    int AnotherNumber;
}

因此,在这种情况下,我基本上有一个 CustomerInfo 的创建页面。用户填写客户信息表单并保存,然后被定向到 InputData 的 Create 页面,保存它,被重定向到另一个视图,等等。在发生这种情况时,我需要跟踪所有这些都属于的“个人资料”。

我考虑过使用 Session 来存储它,但我知道这样做的一些缺点,特别是如果多个服务器正在处理请求 - 会话丢失等。

对于这样的事情,什么是更好的解决方案/最佳实践?

编辑:我应该注意我现在正在使用数据库来存储这些数据。所以对于这个例子,我有一个“配置”表,它分别包含一个 CustomerInfo 表和一个 InputData 表的外键。

【问题讨论】:

  • 您没有在帖子中提到考虑使用数据库。您对此有何反对意见?
  • 我编辑了我的帖子,提到我正在使用数据库。我可以将 InputData 保存到其各自的表中,但我需要一种将保存的 InputData 与正在配置的当前配置文件相关联的方法。
  • 我会使用数据库在可能的许多服务器上保持会话。或者更好的是,一个配置文件表,这样您就可以为用户提供一个 profileId,然后您将使用它来关联数据的其他部分......
  • InputData 通过表中的外键与配置文件相关联。当用户登录时,会话会跟踪您的身份 - 换句话说,它将个人资料与您当前的会话相关联。
  • 我再次编辑了我的帖子。我认为“个人资料”一词的使用有点误导。在我的情况下,个人资料不是实际的用户个人资料。相反,它是一堆不同数据的模型。

标签: c# asp.net .net asp.net-mvc entity-framework


【解决方案1】:

我们已将会话用于特定于用户的数据。由于我们的应用程序是单个服务器(或在具有粘性会话的多服务器场景中),因此会话可以很好地完成这项工作。为此,您需要评估您的情况。您确定要使用多台服务器、网络场或单台服务器等来进行适当的规划吗?

另一种方法是使用身份验证 cookie 存储最少的用户信息(您可以存储其他数据,例如用户 ID),然后从 cookie 中读取它并在回发或从数据库请求时重新加载。我建议只存储特定于用户的内容(例如 ID),而不是尝试将所有配置文件数据存储在 cookie 中。

【讨论】:

  • 另外,我认为如果要使用会话 - SQL Server 模式可能是最好的选择,因为它最可靠。
  • 这可能是最可靠的——只要确保所有进入的内容都是可序列化的,否则你会得到错误。如果占用空间足够小,并且您正在使用单个会话或带有代理的粘性会话,那么 in proc 通常也可以...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-10-15
  • 2018-03-17
  • 1970-01-01
  • 2011-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多