gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 22:50:25 24 4
gpt4 key购买 nike

我正在我的 ASP.NET MVC 应用程序中设计将接收对象的表单。典型的编辑操作如下所示:

    [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);
}

存储库中的 SavePerson 调用执行此操作:

    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();
}
}

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

仅使用来自表单的字段更新模型的最佳做法是什么?我是否必须先从数据库中获取记录并手动更新它的属性,如:

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

或者还有其他更简洁的方法吗?

最佳答案

Stephen Walther 刚刚发布了 an article describing this very thing在 ASP.NET MVC 中。我建议您实际上在 LINQ to SQL 之上创建自己的一组 DTO 和业务对象,并将 LINQ to SQL 视为 language-integrated object database。由于 gross complexities introduced by managing the DataContext , 根据Pro LINQ ,应通过设计尽可能少地保持活力。

如果您要使用 LINQ to SQL 实体作为 DTO,您应该首先获取实体,分离它,更新它,重新附加它,然后提交它。

关于c# - 更新来自表单的 LINQ 模型的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/595793/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com