在更新或添加到数据库之前,是否有人需要如何与数据库进行交互的链接或建议是否存在?我看到的每个示例都展示了如何验证属性,例如“是必需的”,“电子邮件是”,“数字是”等,但是您如何关联“无法订购缺货商品”的验证? 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将为信息调用存储库,然后确定是否存在违规情况。实际上,如果您使用的是存储库,那么我认为这是更可取的方法。

10-04 21:08
查看更多