[英]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
来选择适当的数据集。
方法一
我创建了一个获取这些关联并返回正确数据集的服务。 我想我可以在需要获取信息的每个控制器中使用它。 但我认为这在数据库查找方面可能代价高昂。 它必须基于用户,因此从请求中获取。
我只是不确定我将如何去做。
过程是:
我使用了类似的东西,并为对象使用了session
和application
空间。
因此,当应用程序启动时,将所有特许经营对象加载到application
:
Application["Franchise"] = MethodToLoadFranchiseInfo();
然后您可以随时通过Franchise f = Application["Franchise"];
访问它Franchise f = Application["Franchise"];
同样,对于客户端,当他们登录时,以类似的方式将客户端信息加载到Session
中。
唯一需要注意的是,如果您需要在更新时刷新Application
对象,会话也是如此,或者需要注销并重新登录。
这样你就只有一次命中数据库和内存中可访问的对象!
* 编辑添加 *
只是对此有更多想法,可能还有一些我会自己实现的想法。 如果在application
和session
对象中都放置了时间戳,如果会话对象比application
对象旧(它将在应用程序范围内集中更新),则访问数据库并刷新session
对象。
这样,当后端/管理员更改某些内容时,您不会退出/重新登录。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.