Первая попытка Linq to Sql в NerdDinner - нарушения правил препятствуют сохранению - PullRequest
4 голосов
/ 28 марта 2009

Я пытаюсь просмотреть пример главы NerdDinner из ASP.Net MVC 1.0, и я столкнулся с ошибкой. Все было непросто, пока я не добрался до той части, где мне нужно отредактировать ужин. Я следовал руководству слово в слово от создания проекта до этого момента (по крайней мере, лучшее, что я могу сказать). Однако, когда я вызываю метод SubmitChanges для объекта NerdDinnerDataContext , я получаю исключение, которое говорит:

Нарушение правил препятствует сохранению

Я не замечаю каких-либо различий между моим кодом прямо сейчас и кодом, который находится в финальном проекте (кроме некоторых дополнительных функций, которые я еще не добавил, очевидно). По сути, я не знаю, как решить эту ошибку на данный момент. Я попытался найти некоторые ответы в Интернете, но безуспешно.

Вот некоторые фрагменты кода из моего проекта, хотя я не уверен, насколько они хороши.

из моего класса 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 ]

8 голосов
/ 28 марта 2009

RuleViolations - вот как Скотт Хансельман, создатель NerdDinners, решил инкапсулировать бизнес-логику.

Он разделил классы Linq To SQL и добавил функцию с именем GetRuleViolations (), в которую он добавил все свои бизнес-правила. Взгляните на этот метод, чтобы увидеть, что происходит.

3 голосов
/ 09 апреля 2009

У меня была та же проблема, что и у Аткроуфорда, но благодаря Джованни мне удалось ее решить. Во-первых, когда я начал этот урок, я заполнил номер телефона из базы данных случайными числами. Теперь, когда я попытался отредактировать свои существующие данные, я получил это «нарушение правил», потому что номер телефона был неправильной формы. Итак, посмотрите в папке Models на Dinner.cs по адресу:

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

    }

Вы можете видеть, что я прокомментировал эту строку, поэтому метод IsValidNumber в классе PhoneValidator никогда не вызывается.

Или вы можете ввести данные для номера телефона в соответствии с регулярными выражениями из PhoneValidator

0 голосов
/ 28 марта 2009

Для получения дополнительной информации о приготовлении обеда для ботаников обязательно посмотрите книгу ASP.NET MVC 1.0 и бесплатную первую главу.

На указанном вами сайте есть ссылка на него. Вот и снова, http://tinyurl.com/aspnetmvc

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...