【发布时间】:2022-12-07 19:49:33
【问题描述】:
是否可以通过电影列表而不是为每次验证调用数据库?
我们考虑过缓存,但这对我们来说不切实际。
protected override System.ComponentModel.DataAnnotations.ValidationResult IsValid(object value, ValidationContext validationContext)
{
if (validationContext == null && value != null)
{
var id = value is Movie ? ((Movie)value).ID : (int)value;
var movieRepository = DependencyInjectionHelper.Resolve<IMovieRepository>();
var movie = movieRepository.Get().FirstOrDefault(e => e.MovieId == id);
if (movie == null)
return new System.ComponentModel.DataAnnotations.ValidationResult(FormatErrorMessage(string.Empty));
return System.ComponentModel.DataAnnotations.ValidationResult.Success;
}
return System.ComponentModel.DataAnnotations.ValidationResult.Success;
}
【问题讨论】:
-
针对您的特定需求的非常广泛的问题。当然你可以传递电影列表,你有“值”参数,它是对象 - 所以创建将保存电影列表的类,并将它传递到这里。
-
“我们考虑过缓存,但这对我们来说不切实际”但这似乎是最好的选择。为什么不?你也可以只缓存 MovieIDs,所以这是必要的。
-
@kosist 我认为这可能是最好的解决方案
-
@TimSchmelter 这是一个多租户系统,已经涉及很多缓存。所以在这种情况下,它会为每个用户缓存他们不同的电影列表
-
当您说传入电影列表时,您的意思是验证电影列表而不是仅验证电影列表以最小化数据库调用或传入电影列表以验证单个电影以消除数据库调用?
标签: c#