在更新或添加到数据库之前,是否有人需要如何与数据库进行交互的链接或建议是否存在?我看到的每个示例都展示了如何验证属性,例如“是必需的”,“电子邮件是”,“数字是”等,但是您如何关联“无法订购缺货商品”的验证? This xVal blog post涉及它,但未提供示例。
我一直在跟踪使用Repository的NerdDinner教程,但这一点我不太了解...说我们有一个带有Create方法的OrderController,在创建订单之前,我们必须首先检查该项目有现货。在NerdDinner样式中, Controller 使用存储库与数据库进行通信,因此我们的Order对象(模型)将如何与属性验证一起实现此验证,因为它无法与数据库进行通信?
谢谢你的帮助
最佳答案
在NerdDinner教程中,您可以 checkout IsVaild,然后 checkout GetRuleViolation方法。根据您的业务和数据库规则,您可以在插入数据之前使用它们来检查数据。您甚至可以创建IsValidForInsert方法来检查需要执行的所有插入特定规则。
在NerdDinner中,GetRuleViolation允许您检索违反的规则,并根据需要将它们冒泡到界面。
public bool IsValid
{
get { return (GetRuleViolations().Count() == 0); }
}
public IEnumerable<RuleViolation> GetRuleViolations()
{
if (CheckDbForViolation)
yield return new RuleViolation("Database Violation", "SomeField");
if (String.IsNullOrEmpty(Title))
yield return new RuleViolation("Title is required", "Title");
if (String.IsNullOrEmpty(Description))
yield return new RuleViolation("Description is required", "Description");
if (String.IsNullOrEmpty(HostedBy))
yield return new RuleViolation("HostedBy is required", "HostedBy");
... etc ...
yield break;
}
public bool CheckDbForViolation()
{
/// Do your database work here...
}
您可以进一步将数据库代码拆分到存储库中。 CheckDbForViolation将为信息调用存储库,然后确定是否存在违规情况。实际上,如果您使用的是存储库,那么我认为这是更可取的方法。