在NerdDinner中首次尝试Linq to Sql - 规则违规会阻止保存

时间:2009-03-27 23:23:44

标签: asp.net-mvc linq-to-sql

我正在尝试浏览ASP.Net MVC 1.0中的NerdDinner示例章节,我遇到了一个错误。在我到达需要编辑晚餐的部分之前,所有东西都是笨拙的。我从项目的创建到现在一直跟着指导,直到这一点(至少我能说的最好)。但是,当我在 NerdDinnerDataContext 对象上调用 SubmitChanges 方法时,我得到一个例外情况:

  

规则违规会阻止保存

我没有注意到我的代码与最终项目中的代码之间存在任何差异(除了一些我还没有添加的其他功能,显然)。基本上,我不知道如何在此时对此错误进行故障排除。我试图在网上寻找一些答案,没有运气。

以下是我项目中的一些代码片段,但我不确定它们会有多好。

来自我的DinnerRepository类的

    private NerdDinnerDataContext db = new NerdDinnerDataContext();
...
    public void Save()
    {
        db.SubmitChanges();
    }
来自DinnersController的

    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult Edit(int id, FormCollection formValues)
    {
        // Retrieve existing dinner
        Dinner dinner = dinnerRepository.GetDinner(id);

        // Update dinner with form posted values
        dinner.Title = Request.Form["Title"];
        dinner.Description = Request.Form["Description"];
        dinner.EventDate = DateTime.Parse(Request.Form["EventDate"]);
        dinner.Address = Request.Form["Address"];
        dinner.Country = Request.Form["Country"];
        dinner.ContactPhone = Request.Form["ContactPhone"];

        // Persist changes back to database
        dinnerRepository.Save();

        // Perform HTTP redirect to details page for the saved Dinner
        return RedirectToAction("Details", new { id = dinner.DinnerID });
    }


如何解决此问题?我怎样才能找到这些“违反规则”的内容?

这是我的第一个问题,所以如果不是那么好我会道歉。

3 个答案:

答案 0 :(得分:8)

RuleViolations是NerdDinners创建者Scott Hanselman决定封装业务逻辑的方式。

他将Linq To SQL类分开,并添加了一个名为GetRuleViolations()的函数,这是他添加所有业务规则的地方。看看那个方法,看看发生了什么。

答案 1 :(得分:3)

我遇到了像atcrawford一样的问题,但是对于Giovanni而言,我设法解决了这个问题。 首先,当我开始本教程时,我使用一些随机数字从数据库填充电话号码。 现在,当我尝试编辑现有数据时,我收到了“规则违规”,因为电话号码的格式不正确。 请查看Dinner.cs上的Models文件夹:

public IEnumerable<RuleViolation> GetRuleViolations()
    {//if (!PhoneValidator.IsValidNumber(ContactPhone, Country))
        //    yield return new RuleViolation("Phone# does not match country", "ContactPhone");

    }

你可以看到我注释了那一行,所以永远不会调用PhoneValidator类的IsValidNumber方法。

或者,您可以根据PhoneValidator

中的正则表达式输入电话号码的数据

答案 2 :(得分:0)

有关设置书呆子晚餐的更多信息,请务必查看ASP.NET MVC 1.0书籍和免费的第一章。

您提到的网站上有链接。这又是http://tinyurl.com/aspnetmvc