ASP.. NET存储交叉请求数据

本文关键字:请求 数据 NET 存储 ASP | 更新日期: 2023-09-27 18:15:06

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

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的选项是什么,这样每个数据请求都可以使用Id来选择合适的数据集。

方法1

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

我只是不确定我该怎么做。

过程如下:

  1. 用户登录
  2. 应用程序确定关联的特许经营权
  3. 用户请求一些信息
  4. 请求使用关联的专营权来选择正确的数据集

ASP.. NET存储交叉请求数据

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

因此,当应用程序启动时,将所有特许经营对象加载到application:
Application["Franchise"] = MethodToLoadFranchiseInfo();

你可以在任何时候通过Franchise f = Application["Franchise"];

访问它

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

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

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

* Edit to Add *

我对这个有更多的想法,可能是我自己想要实现的东西。如果您在applicationsession对象中都放置了时间戳,如果会话对象比application对象更早(将在应用程序范围内集中更新),则点击数据库并刷新session对象。

这样,当后台/admin更改某些内容时,您就不会得到log out/log back。