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
我创建了一个获取这些关联并返回正确数据集的服务。我想我可以在每个需要获取信息的控制器中使用这个。但我认为这在数据库查找方面可能代价很高。它必须基于用户,所以从请求中获取。
我只是不确定我该怎么做。
过程如下:
- 用户登录
- 应用程序确定关联的特许经营权
- 用户请求一些信息
- 请求使用关联的专营权来选择正确的数据集
我使用了类似的东西,并使用session
和application
空间的对象。
application
:
Application["Franchise"] = MethodToLoadFranchiseInfo();
你可以在任何时候通过Franchise f = Application["Franchise"];
同样,对于客户端,当他们登录时,以类似的方式将客户端信息加载到Session
中。
唯一的警告是,当有更新时,您需要刷新Application
对象,会话也是如此,或者需要注销并重新登录。
这样你只需要一次命中数据库和内存中可访问的对象!
* Edit to Add *
我对这个有更多的想法,可能是我自己想要实现的东西。如果您在application
和session
对象中都放置了时间戳,如果会话对象比application
对象更早(将在应用程序范围内集中更新),则点击数据库并刷新session
对象。
这样,当后台/admin更改某些内容时,您就不会得到log out/log back。