繁体   English   中英

ASP.NET 存储交叉请求数据

[英]ASP.NET Storing Cross Request Data

在我的应用程序中,我有这个实体:

public class Franchise
{
    public Guid Id {get;set;}
    public string Name {get;set;}
}

当我的每个用户登录时,他们都与一个特许经营权相关联。

还有一个实体:

public class Client
{
    public Guid FranchiseId {get;set;}
    public virtual Franchise Franchise {get;set;}

    public string Name {get;set;}
    /* other useful client information */
}

根据我的用户特许经营协会将决定他们将看到(或允许看到)哪些客户

所以相当于做

dbContext.Set<Client>().Where(x => x.FranchiseId.Equals(associatedFranchiseId));

我想知道存储该associatedFranchiseId FranchiseId 的选项是什么,以便每个数据请求都可以使用该Id来选择适当的数据集。

方法一

我创建了一个获取这些关联并返回正确数据集的服务。 我想我可以在需要获取信息的每个控制器中使用它。 但我认为这在数据库查找方面可能代价高昂。 它必须基于用户,因此从请求中获取。

我只是不确定我将如何去做。

过程是:

  1. 用户登录
  2. 申请决定了相关的特许经营权
  3. 用户请求一些信息
  4. 该请求使用关联的特许经营权来选择正确的数据集

我使用了类似的东西,并为对象使用了sessionapplication空间。

因此,当应用程序启动时,将所有特许经营对象加载到application

Application["Franchise"] = MethodToLoadFranchiseInfo();

然后您可以随时通过Franchise f = Application["Franchise"];访问它Franchise f = Application["Franchise"];

同样,对于客户端,当他们登录时,以类似的方式将客户端信息加载到Session中。

唯一需要注意的是,如果您需要在更新时刷新Application对象,会话也是如此,或者需要注销并重新登录。

这样你就只有一次命中数据库和内存中可访问的对象!

* 编辑添加 *

只是对此有更多想法,可能还有一些我会自己实现的想法。 如果在applicationsession对象中都放置了时间戳,如果会话对象比application对象旧(它将在应用程序范围内集中更新),则访问数据库并刷新session对象。

这样,当后端/管理员更改某些内容时,您不会退出/重新登录。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM