如何在mongoDb上存储验证规则,并使用规则引擎在C#模型中使用这些规则

时间:2014-08-12 08:00:31

标签: mongodb document rule-engine

如何在mongoDb上存储验证规则并使用规则引擎将这些规则应用于C#中的模型?

这里我使用RuleEngine在Student模型上应用规则。

engine.For()                

                   .Setup(e => e.Name)
                       .MustNotBeNullOrEmpty()
                       .MustPassRule(new NameRule())

                   .Setup(e => e.Email)
                       .MustPassRule(new EmailRule())


                    .Setup(e => e.Mobile)
                        .MustPassRule(new MobileRule());

但在我的情况下,实际上我想要MustNotBeNullOrEmpty()和MustPassRule(新的NameRule())必须来自Db,并且如果学生名称与Student模型的所有字段类似,则动态应用?

有没有从DataBase(MongoDB)动态添加规则的解决方案?

2 个答案:

答案 0 :(得分:0)

MongoDB具有动态模式,因此无法强制执行类似MustNotBeNullOrEmpty的操作。但是,您可以使用类似

的查询排除检索到的文档的值为null或为空
db.yourColl.({$and:[
  {"fieldNotNullOrEmpty":{$exists:true}},
  {"fieldNotNullOrEmpty":{$ne:""}}
]})

答案 1 :(得分:0)

您可以做的是设计您的规则,以便在可以存储的模型中表示(在您的情况下在mongoDB中)。例如,one之类的内容允许您以XML格式对验证规则进行建模。当你有一个可以存储在任何地方的可转移对象(文件系统,数据库,blob存储...),然后能够将实际规则模型序列化为中间形式(XML,JSON ...)并将这些模型存储回来进入您的存储(例如mongoDB),当您需要时,可以从存储中加载模型,反序列化并重新构建规则模型,然后执行它们。

您的代码示例的问题在于规则的建模是在流畅的界面中,可以用作规则模型的构建器而不是实际模型本身。而是将规则模型与构建器组件(流畅的界面)分开。然后,您可以自由地执行您需要的操作(例如,在db中存储)以处理您的规则模型。