Вставка данных на основе ParentID, странное поведение ASP.NET MVC? - PullRequest
0 голосов
/ 15 января 2010

У меня есть простая форма, которая вставляет новую категорию с указанным parentID (ServiceID).
и мои родительские отношения с детьми таковы;

Сервис> Категория

Вот мой URL для создания категории на основе ServiceId:
/ Admin / Категории / Создать / 3 => " 3 - идентификатор службы "

и мой метод действий это

[AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Create(int? id, Category category)
        {
            if (ModelState.IsValid)
            {
                try
                {
                    category.Service = dbService.GetAll().WithServiceId(id.Value).SingleOrDefault();
                    dbCategory.Add(category);
                    dbCategory.Save();
                    return RedirectToRoute("List_Categories", new { ServiceId = id.Value });
                }
                catch
                {
                    ModelState.AddRuleViolation(category.GetRuleViolations());
                }
            }
            return
                View ....

Я использую LinqToSql для действий с БД. В любом случае странная часть начинается здесь. Когда я сохраняю данные, он вставляет данные в таблицу Service вместо того, чтобы вставлять данные только в таблицу категорий, а данные, которые вставляются в таблицу категорий, имеют новый вставленный ServiceID.

Это проблема с ASP.NET MVC ModelBinder или я делаю ошибку, которую не вижу?
Я использовал LinqToSql в нескольких проектах и ​​никогда не сталкивался с подобной проблемой

Ответы [ 2 ]

1 голос
/ 15 января 2010

Откуда берется ваш объект Category? Как я вижу, вы полагаетесь на привязку модели ASP.NET MVC для ее предоставления, но для этого вам нужна форма где-нибудь для создания POST. Это также поможет увидеть форму.

Также лично я скорее использую FormCollection (а не классы бизнес-моделей) в своих сигнатурах действий, а затем самостоятельно извлекаю опубликованные данные из FormCollection. Потому что рано или поздно у вас получатся сложные объекты с различными отношениями «один ко многим, многие ко многим», которые просто не подхватит привязка к модели, и вам придется сконструировать их самостоятельно.

1 голос
/ 15 января 2010

Это может быть ошибка в настройке LINQ To SQL. Является ли идентификатор сервиса автоматически сгенерированным полем в БД - помечен ли он как таковой в классах LINQ to SQL? Ваш сервис отключает его от контекста данных, а затем не присоединяет его перед отправкой? Если да, пытались ли вы добавить категорию в службу, а затем сохранить обновленную службу?

  var service = ...
  service.Categories.Add(category);
  service.Save();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...