首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >EntityFramework.Filters动态参数

EntityFramework.Filters动态参数
EN

Stack Overflow用户
提问于 2017-08-17 18:39:34
回答 1查看 553关注 0票数 0

我使用EntityFramework.Filters包来为我的实体设置一些缺省值和动态过滤器。它运行得很好,但是Q:当我动态设置一个新的筛选器参数时,它将被忽略,保持第一个值集

在调试模式下,CultureHelper.GetCurrentCulture().Key正确地返回新的区域性集,正在设置筛选器参数,但没有发生任何事情。

代码

代码语言:javascript
复制
public partial class DataModel : DbContext
{
    public DataModel() : base("name=DataModel")
    {
            var currentLanguageId = CultureHelper.GetCurrentCulture().Key;
            this.EnableFilter("HideDeleted");
            this.EnableFilter("CurrentLanguage").SetParameter("currentLanguageId", currentLanguageId);
    }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        DbInterception.Add(new FilterInterceptor());
        modelBuilder
            .Conventions
            .Add(
                FilterConvention.Create<IDeleted, int>("HideDeleted", (e, Deleted) => e.Deleted == false),
                FilterConvention.Create<ILanguage, long>("CurrentLanguage", (e, currentLanguageId) => e.LanguageId == currentLanguageId)
            );
    }
}
EN

回答 1

Stack Overflow用户

发布于 2017-08-17 19:21:45

在启用构造函数中的筛选器之前,我只能通过访问任何上下文属性来再现这个问题,这会导致OnModelCreation被引发,而在被提出之后,就不可能设置过滤器。调试OnModelCreation,并在启用筛选之前定义导致ModelCreation的原因。只需将断点设置为Constructor和OnModelCreation,您就会看到OnModelCreation何时真正启动。

过滤应用于一组对象。拦截器是基于上下文集属性见“花花公子”表达式变量构建的。我想你是在检索相关的物品。类似于Device.Descriptions,在这种情况下,它返回所有相关记录而不被拦截。

如果您使用的是自定义硬编码值,最好在筛选器中使用Thread.CurrentThread.CurrentCulture.LCID,这将被标准化,如果应用程序过滤器中的语言发生变化,则在同一时刻会更改。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45742764

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档