代码之家  ›  专栏  ›  技术社区  ›  changelog

更新来自表单的LINQ模型的最佳方法

  •  2
  • changelog  · 技术社区  · 17 年前

        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Edit(int id, Person person)
        {
            peopleService.SavePerson(person);
            return Redirect("~/People/Index");
        }
    

    这个 SavePerson

        public void SavePerson(Person person)
        {
            _peopleRepository.SavePerson(person);
        }
    

    储蓄者 在存储库中调用会执行以下操作:

        public void SavePerson(Person person)
        {
            using (var dc = new SIGAPDataContext())
            {
                if (person.IsNew)
                {
                    dc.People.InsertOnSubmit(person);
                }
                else
                {
                    dc.People.Attach(person, true);
                }
    
                dc.SubmitChanges();
            }
        }
    

    现在,当我创建新记录时,它工作得很好。但是,当我在没有所有表单元素的情况下更新它时,它会使其他字段为空。例如,我的个人模型有一个NationalityID属性,如果它没有显示在编辑表单上,该属性将为null。

    Person persistedPerson = peopleService.GetPerson(person.ID);
    persistedPerson.Name = person.Name;
    persistedPerson.DateOfBirth = person.DateOfBirth
    // etc...
    

    或者还有其他更干净的方法吗?

    2 回复  |  直到 17 年前
        1
  •  2
  •   user29439 user29439    17 年前

    斯蒂芬·沃尔特刚刚发帖 an article describing this very thing 在ASP.NETMVC中。我建议您在LINQtoSQL之上创建自己的DTO和业务对象集,并将LINQtoSQL视为 language-integrated object database 由于 gross complexities introduced by managing the DataContext Pro LINQ ,应通过设计尽可能少地保持活性。

        2
  •  1
  •   tvanfosson    17 年前

    public ActionResult Edit( int id )
    {
          Person person = peopleService.GetPerson(id);
          UpdateModel(person,new string[] { list of properties to update } );
          peopleService.SavePerson(person);
    
          ...
    }